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(加密管理器):提供了加密方式的设计及管理

官网中结构图如下所示:
shiro安全框架_第1张图片

认证拦截实现

添加依赖

pom.xml中添加:


 org.apache.shiro
 shiro-spring
 1.5.3

实现

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 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 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;
}

认证业务

流程

身份认证即判定用户是否是系统的合法用户,用户访问系统资源时的认证(对用户身份信息的认证)
shiro安全框架_第2张图片

业务主要就是:
1)realm从数据层取到用户信息
2)客户端传递用户输入信息
3)在Authenticator认证管理器中进行操作

授权业务

流程

授权即对用户资源访问的授权(是否允许用户访问此资源),用户访问系统资源时的授权流程
shiro安全框架_第3张图片

业务主要就是:
1)realm从数据层取到用户信息
2)客户端传递用户输Authorizer授权管理器中进行操作

你可能感兴趣的:(shiro)