shiro实战系列(一)之入门实战
一、什么是shiro?
Apache Shiro 是一个强大而灵活的开源安全框架,它干净利落地处理身份认证,授权,企业会话管理和加密。 Apache Shiro 的首要目标是易于使用和理解。安全有时候是很复杂的,甚至是痛苦的,但它没有必要这样。框架应 该尽可能掩盖复杂的地方,露出一个干净而直观的 API,来简化开发人员在使他们的应用程序安全上的努力。
二、shiro可以做什么?
验证用户来核实他们的身份。
对用户执行访问控制,
如:
(1) 判断用户是否被分配了一个确定的安全角色
(2)判断用户是否被允许做某事
在任何环境下使用 Session API,即使没有 Web 或 EJB 容器。
在身份验证,访问控制期间或在会话的生命周期,对事件作出反应。
聚集一个或多个用户安全数据的数据源,并作为一个单一的复合用户“视图”。
启用单点登录(SSO)功能。
为没有关联到登录的用户启用"Remember Me"服务。
Shiro 视图在所有应用程序环境下实现这些目标——从最简单的命令行应用程序到最大的企业应用,不强制依赖其 他第三方框架,容器,或应用服务器。当然,该项目的目标是尽可能地融入到这些环境,但它能够在任何环境下立 即可用。
三、shiro结构图
Shiro 把 Shiro 开发团队称为“应用程序的四大基石”——身份验证,授权,会话管理和加密作为其目标。
shiro核心四要素,简单的概述为认证,授权,会话,加密等。
Authentication:有时也简称为“登录”,这是一个证明用户是他们所说的他们是谁的行为。
Authorization:访问控制的过程,也就是绝对“谁”去访问“什么”。
Session Management:管理用户特定的会话,即使在非 Web 或 EJB 应用程序。
Cryptography:通过使用加密算法保持数据安全同时易于使用。
额外的功能概述:
Web Support:Shiro 的 web 支持的 API 能够轻松地帮助保护 Web 应用程序。
Caching:缓存是 Apache Shiro 中的第一层公民,来确保安全操作快速而又高效。
Concurrency:Apache Shiro 利用它的并发特性来支持多线程应用程序。
Testing:测试支持的存在来帮助你编写单元测试和集成测试,并确保你的能够如预期的一样安全。
"Run As":一个允许用户假设为另一个用户身份(如果允许)的功能,有时候在管理脚本很有用。
"Remember Me":在会话中记住用户的身份,所以他们只需要在强制时候登录。
四、简单的使用程序
示例为maven工程,jdk8,maven3以上
(1)pom依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.apache.shiro.tutorials</groupId><artifactId>shiro-tutorial</artifactId><version>0.0.1-SNAPSHOT</version><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.5</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.5</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-core</artifactId><version>1.1.0</version></dependency></dependencies><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>2.0.2</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin><plugin><groupId>org.codehaus.mojo</groupId><artifactId>exec-maven-plugin</artifactId><version>1.1</version><executions><execution><goals><goal>java</goal></goals></execution></executions><configuration><classpathScope>test</classpathScope><mainClass>Tutorial</mainClass></configuration></plugin></plugins></build></project>
logger4j.properties配置文件内容:
如果不加入,将无法看到log4j日志打印的结果
#config root logger log4j.rootLogger = INFO,system.out log4j.appender.system.out=org.apache.log4j.ConsoleAppender log4j.appender.system.out.layout=org.apache.log4j.PatternLayout log4j.appender.system.out.layout.ConversionPattern=[Log]%-d{yyyy-MM-dd HH:mm:ss} %5p[%F:%L]:%m%n #log4j.appender.system.out.layout.ConversionPattern=[Log] %5p[%F:%L]:%m%n#config this Project.file logger log4j.logger.thisProject.file=INFO,thisProject.file.out log4j.appender.thisProject.file.out=org.apache.log4j.DailyRollingFileAppender log4j.appender.thisProject.file.out.File=pmslogout.log log4j.appender.thisProject.file.out.layout=org.apache.log4j.PatternLayout log4j.appender.thisProject.file.out.layout.ConversionPattern=[Log]%-d{yyyy-MM-dd HH:mm:ss} %5p[%F:%L]:%m%n log4j.appender.thisProject.file.append=true
(2)运行main方法
import org.apache.log4j.Logger; public class Tutorial { private static Logger logger = Logger.getLogger(Tutorial.class); public static void main(String[] args) { logger.info("Hello Wolrd Apache Shiro Application"); System.exit(0); } }
Enable Shiro
在应用程序中启用 Shiro 最先要明白的事情是几乎在 Shiro 中的每个东西都与一个名为 SecurityManager 的主要的/核 心的组件有关。对于那些熟悉 Java 安全的人来说,这是 Shiro 的 SecurityManager 概念——它不等同于 java.lang.SecurityManager。
现在了解 Shiro 的 SecurityManager 是应用程序的 Shiro 环境的核心及每个应用程序中必须存在一个 SecurityManager 是很有益处的。因此,在我们的实战系列应用程序中第一 件要做的事情就是配置 SecurityManager 实例。
Configuration
虽然我们能够直接实例化一个 SecurityManager 类,但 Shiro 的 SecurityManager 实现有足够的配置选项及内置组件 使得在 Java 源代码做这件事情变得较为痛苦——如果使用一个灵活的基于文本的配置格式来配置 SecurityManager, 那么这将是一件很容易的事情。
为此,Shiro 通过基于文本的 INI 配置文件提供了一个默认的"共性(common denominator)"解决方案。近来人们已 经相当厌倦了使用笨重的 XML 文件,且 INI 文件易于阅读,使用简单,依赖性低。你稍后将会看到有了对象导航图 的简单理解,INI 文件能够有效地被用来配置简单的对象图,如 SecurityManager。
Many Configuration Options
Shiro 的 SecurityManager 实现及所有支持组件都是兼容 JavaBean 的。这允许 Shiro 能够与几乎任何配置格式如 XML(Spring,JBoss,Guice 等等),YAML,JSON,Groovy Builder markup,以及更多配置被一起配置。INI 文件只是 Shiro 的“共性”格式,他它允许任何环境下的配置,除非其他选项不可用。
上面的简单应用仅仅只是证明加入shiro相关的依赖运行没问题,下面进入简单的真正实战
shiro.ini文件
权限角色相关的规则就在该文件中编写:
[user] root = secret,admin guest = guest,guest presidentskroob = 12345,president darkhelmet = ludicrousspeed,darklord,schwartz lonestarr=vespa,goodguy,schwartz[roles] admin = *j schwartz = lightsaber:* goodguy = winnebago:drive:eagle5
main方法运行:
import org.apache.log4j.Logger; import org.apache.shiro.SecurityUtils; import org.apache.shiro.config.IniSecurityManagerFactory; import org.apache.shiro.mgt.SecurityManager; import org.apache.shiro.util.Factory;public class Tutorial {private static Logger logger = Logger.getLogger(Tutorial.class);public static void main(String[] args) {logger.info("My First Apache Shiro Application");/***步骤一: 我们使用 Shiro 的 IniSecurityManager 实现来提取我们的 shiro.ini 文件,它位于 classpath 的根目录。* 该实现反映了 Shiro 对工厂设计模式的支持。* classpath: 前缀是一个资源定位符,用来告诉 shiro 去哪加载 ini 文件(其 他前缀,如 url:和 file:也同样被支持)。 */Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");/*** 步骤二: factory.getInstance()方法被调用,它来解析 INI 文件并返回反映该配置的 SecurityManager 实例。 */SecurityManager securityManager = factory.getInstance();/*** * 步骤三: 在这个简单的例子中,我们把 SecurityManager 设置为一个静态的(memory)单例,能够跨 JVM 访问。* 但请 注意,这是不可取的,如果你在单个的 JVM 只中会有不只一个启用 Shiro 的应用程序。对于这个简单的例子 而言,这是没有问题的,但更为复杂的应用程序环境通常将 SecurityManager * 置于应用程序特定的存储中(如 在 Web 应用中的 ServletContext 或 Spring,Guice 后 JBoss DI 容器实例)。*/SecurityUtils.setSecurityManager(securityManager);System.exit(0);}}
Apache Shiro简单的权限管理框架,无论是在github还是码云上,看过不少项目,基本都采取了shiro作为权限控制,spring securty,这个玩意,spring本身集成,不过它并没有shiro好理解,当然掌握好shiro对于理解spring security是非常有帮助的。
转载于:https://www.cnblogs.com/youcong/p/9125317.html
shiro实战系列(一)之入门实战相关推荐
- java 秒杀代码_Java秒杀系统实战系列~商品秒杀代码实战
摘要: 本篇博文是"Java秒杀系统实战系列文章"的第六篇,本篇博文我们将进入整个秒杀系统核心功能模块的代码开发,即"商品秒杀"功能模块的代码实战. 内容: & ...
- Java秒杀系统实战系列~商品秒杀代码实战
摘要: 本篇博文是"Java秒杀系统实战系列文章"的第六篇,本篇博文我们将进入整个秒杀系统核心功能模块的代码开发,即"商品秒杀"功能模块的代码实战. 内容: & ...
- android php实战,android编程开发入门实战例子–hello word
android开发入门实战编程例子–hello word 1.打开Eclipse,选择菜单File->New->Other,打开新建对话框.选择Android Project后,点击Nex ...
- 关东升的iOS实战系列图书 《iOS实战:入门与提高卷(Swift版)》已经上市
承蒙广大读者的厚爱我的 <iOS实战:入门与提高卷(Swift版)>京东上市了,欢迎广大读者提出宝贵意见.http://item.jd.com/11766718 ...
- 关东升的iOS实战系列图书 《iOS实战:传感器卷(Swift版)》已经上市
承蒙广大读者的厚爱我的 <iOS实战:传感器卷(Swift版)>京东上市了,欢迎广大读者提出宝贵意见.http://item.jd.com/11760248.html 欢迎关注关东升 ...
- 推荐系统实战系列(python版).rar_python实战音乐推荐系统
SVD奇异值分解里具体说了SVD的基本原理解读,本次实战分析SVD的应用 数据说明: 本次数据使用的是用户听音乐的数据,具体数据有需要的可以关注公众号:不懂乱问(Andy_shenzl)后台留言. 回 ...
- [SpringBoot实战系列]实现发送邮件API/发件人中文别名
前言 由于价格监控项目的需求,实现了一个小的邮件发送接口服务,使用了一个单独的SpringBoot项目,给他取名为spring-mail-sender,开源在了Github上.内部我给他命名为提醒服务 ...
- sql判断时间大于0点_Java秒杀系统实战系列-数据库级别Sql的优化与代码的调整
本文是"Java秒杀系统实战系列文章"的第十三篇,从本篇文章开始我们将进入"秒杀代码优化"环节,本文将首先从数据库级别Sql的优化入手,结合调整秒杀相关的部分核 ...
- kubernetes入门实战
kubernetes入门实战 文章目录 kubernetes入门实战 一. Namespace 二. Pod 三. Label 四. Deployment 一. Namespace Namespace ...
最新文章
- wpf Visibility 动画
- 第五届蓝桥杯省赛javaB组试题解析
- Python title() 方法
- 程序人生:这5个程序员,改变了世界,你都认识吗!
- libnids校验和引起回放包不能正常捕捉
- 因云而生 全新视角看阿里云服务器硬件方升架构
- JavaWeb工程师知识图谱
- Oracle Database 21c 十大新特性一览 - New Features
- 解决新安装的Ubuntu18.04没有网络连接的问题
- 获取参数(可以是中文)
- tcl之quartus 脚本学习 · 1 quartus tcl packages 介绍
- MySQL存储过程(一)——存储过程理论基础
- python、mysql、git之各种系统下的安装
- ROS学习笔记02、ROS使用C++、Python来实现HelloWorld
- oracle vm win10,virtualbox win10系统下载-oracle vm virtualbox windows 10 64 bitv6.1.14 最新版 - 极光下载站...
- 26岁从财务转行软件测试,4年沉淀我已经是25k的测开工程师...
- Zemax光学设计(十二) —— 激光扫描物镜设计
- 新年Java小游戏之「年兽大作战」祝您笑口常开
- 分数换算小数补0法_高考志愿填报时“线差法”和“位次法”哪个好?
- C++ STL(八) -------- unordered_set、unordered_map的介绍+使用+比较