简介
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;
@Configuration
public class SpringShiroConfig {
}
2.在Shiro配置类中增加SecurityManager配置(这里肯定要应用org.apache.shiro.mgt.SecurityManager这个接口对象)不要导错包
@Bean
public SecurityManager securityManager() {
DefaultWebSecurityManager sManager=
new DefaultWebSecurityManager();
return sManager;
}
3.在Shiro配置类中增加ShiroFilterFactoryBean对象的配置。通过此对象设置资源匿名拜访、认证拜访
@Bean
public 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的设置– 标识
@Bean
public 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受权管理器中进行操作
发表回复