简介
Shiro是apache旗下一个开源平安框架,将软件系统的平安认证相干的性能:身份认证,权限受权、加密、会话治理等性能组合成了一个通用的平安认证框架.
构造
subject
Subject(主体对象):负责提交用户认证和受权信息(用户/第三方服务)
SecurityManager
SecurityManager(平安管理器):Shiro的外围,用来协调治理组件工作
其蕴含组件有:
- Authenticator(认证管理器):负责执行认证操作。
- Authorizer(受权管理器):负责受权检测。
- SessionManager(会话治理):负责创立并治理用户 Session 生命周期,提供一个强有力的 Session 体验。
- SessionDAO:代表 SessionManager 执行 Session 长久(CRUD)动作,它容许任何存储的数据挂接到 session 治理根底上。
- CacheManager(缓存管理器):提供创立缓存实例和治理缓存生命周期的性能。
- Realms(畛域对象):是shiro和你的应用程序平安数据之间的桥梁
Cryptography
Cryptography(加密管理器):提供了加密形式的设计及治理
官网中结构图如下所示:
认证拦挡实现
增加依赖
pom.xml中增加:
<dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring</artifactId> <version>1.5.3</version></dependency>
实现
1.创立一个shiro配置类,由@Configuration注解形容
package com.cy.pj.common.config;@Configurationpublic class SpringShiroConfig {}
2.在Shiro配置类中增加SecurityManager配置(这里肯定要应用org.apache.shiro.mgt.SecurityManager这个接口对象)不要导错包
@Beanpublic SecurityManager securityManager() { DefaultWebSecurityManager sManager= new DefaultWebSecurityManager(); return sManager;}
3.在Shiro配置类中增加ShiroFilterFactoryBean对象的配置。通过此对象设置资源匿名拜访、认证拜访
@Beanpublic ShiroFilterFactoryBean shiroFilterFactory (SecurityManager securityManager) { ShiroFilterFactoryBean sfBean= new ShiroFilterFactoryBean(); sfBean.setSecurityManager(securityManager); //定义map指定申请过滤规定(哪些资源容许匿名拜访,哪些必须认证拜访) LinkedHashMap<String,String> map= new LinkedHashMap<>(); //动态资源容许匿名拜访:"anon" map.put("/bower_components/**","anon"); map.put("/build/**","anon"); map.put("/dist/**","anon"); map.put("/plugins/**","anon"); //除了匿名拜访的资源,其它都要认证("authc")后拜访 map.put("/**","authc"); sfBean.setFilterChainDefinitionMap(map); return sfBean;}
4.在Controller层增加出现登陆页面的办法doLoginUI
5.批改SpringShiroConfig类中shiroFilterFactorybean的配置,增加登陆url的设置-- 标识
@Beanpublic ShiroFilterFactoryBean shiroFilterFactory (SecurityManager securityManager) { ShiroFilterFactoryBean sfBean= new ShiroFilterFactoryBean(); sfBean.setSecurityManager(securityManager); **sfBean.setLoginUrl("/doLoginUI")** //定义map指定申请过滤规定(哪些资源容许匿名拜访,哪些必须认证拜访) LinkedHashMap<String,String> map= new LinkedHashMap<>(); //动态资源容许匿名拜访:"anon" map.put("/bower_components/**","anon"); map.put("/build/**","anon"); map.put("/dist/**","anon"); map.put("/plugins/**","anon"); //除了匿名拜访的资源,其它都要认证("authc")后拜访 map.put("/**","authc"); sfBean.setFilterChainDefinitionMap(map); return sfBean;}
认证业务
流程
身份认证即断定用户是否是零碎的非法用户,用户拜访系统资源时的认证(对用户身份信息的认证)
业务次要就是:
1)realm从数据层取到用户信息
2)客户端传递用户输出信息
3)在Authenticator认证管理器中进行操作
受权业务
流程
受权即对用户资源拜访的受权(是否容许用户拜访此资源),用户拜访系统资源时的受权流程
业务次要就是:
1)realm从数据层取到用户信息
2)客户端传递用户输Authorizer受权管理器中进行操作