乐趣区

关于shiro:shiro安全框架

简介

Shiro 是 apache 旗下一个开源平安框架, 将软件系统的平安认证相干的性能: 身份认证,权限受权、加密、会话治理等性能组合成了一个通用的平安认证框架.

构造

subject

Subject(主体对象): 负责提交用户认证和受权信息(用户 / 第三方服务)

SecurityManager

SecurityManager(平安管理器):Shiro 的外围, 用来协调治理组件工作
其蕴含组件有:

  1. Authenticator(认证管理器): 负责执行认证操作。
  2. Authorizer(受权管理器): 负责受权检测。
  3. SessionManager(会话治理): 负责创立并治理用户 Session 生命周期,提供一个强有力的 Session 体验。
  4. SessionDAO: 代表 SessionManager 执行 Session 长久(CRUD)动作,它容许任何存储的数据挂接到 session 治理根底上。
  5. CacheManager(缓存管理器): 提供创立缓存实例和治理缓存生命周期的性能。
  6. 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 受权管理器中进行操作

退出移动版