简介
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 受权管理器中进行操作