简介

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