SpringBoot2整合Shiro框架,实现用户权限管理

  

本文源码:GitHub·点这里| | GitEE·点这里

  

一,Shiro简介

  

1,基础概念

  

Apache Shiro是一个强大且易用的Java安全框架,执行身份验证,授权,密码和会话管理。作为一款安全框架Shiro的设计相当巧妙.Shiro的应用不依赖任何容器,它不仅可以在JavaEE下使用,还可以应用在Java se环境中。

  

2,核心角色

  

1)主题:认证主体

  

代表当前系统的使用者,就是用户,在Shiro的认证中,认证主体通常就是用户名和密码,或者其他用户相关的唯一标识。

  

2) SecurityManager:安全管理器

  

Shiro架构中最核心的组件,通过它可以协调其他组件完成用户认证和授权。实际上,SecurityManager就是Shiro框架的控制器。

  

3)域:域对象

  

定义了访问数据的方式,用来连接不同的数据源,如:关系数据库,配置文件等等。

  

3,核心理念

  

Shiro自己不维护用户和权限,通过主题用户主体和领域域对象的注入,完成用户的认证和授权。

  

二、整合SpringBoot2框架

  

1,核心依赖

  
 <代码> & lt; dependency>
  & lt; groupId> org.apache.shiro
  & lt; artifactId> shiro-core
  & lt; version> 1.4.0
  & lt;/dependency>
  & lt; dependency>
  & lt; groupId> org.apache.shiro
  & lt; artifactId> shiro-spring
  & lt; version> 1.4.0
  & lt;/dependency>  
  

2, Shiro核心配置

  
 <代码> @ configuration
  公开课ShiroConfig {/* *
  *会话管理器:会话管理
  *即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中;
  *会话可以是普通java se环境的,也可以是如网络环境的;
  */@ bean (“sessionManager”)
  公共SessionManager SessionManager () {
  DefaultWebSessionManager sessionManager=new DefaultWebSessionManager ();//设置会话过期时间
  sessionManager。setGlobalSessionTimeout (60 * 60 * 1000);
  sessionManager.setSessionValidationSchedulerEnabled(真正的);//去掉shiro登录时url里的JSESSIONID
  sessionManager.setSessionIdUrlRewritingEnabled(假);
  返回sessionManager;
  }/* *
  * SecurityManager:安全管理器
  */@ bean (“securityManager”)
  公共SecurityManager SecurityManager (UserRealm UserRealm, SessionManager SessionManager) {
  DefaultWebSecurityManager securityManager=new DefaultWebSecurityManager ();
  securityManager.setSessionManager (sessionManager);
  securityManager.setRealm (userRealm);
  返回securityManager;
  }/* *
  * ShiroFilter是整个Shiro的入口点,用于拦截需要安全控制的请求进行处理
  */@ bean (“shiroFilter”)
  公共ShiroFilterFactoryBean shiroFilter (SecurityManager SecurityManager) {
  ShiroFilterFactoryBean shiroFilter=new ShiroFilterFactoryBean ();
  shiroFilter.setSecurityManager (securityManager);
  shiroFilter.setLoginUrl ("/userLogin ");
  shiroFilter.setUnauthorizedUrl (“/?;
  String> Map<字符串;,filterMap=new LinkedHashMap<的在();
  filterMap。put ("/userLogin”、“不久”);
  shiroFilter.setFilterChainDefinitionMap (filterMap);
  返回shiroFilter;
  }/* *
  *管理Shiro中一些bean的生命周期
  */@ bean (“lifecycleBeanPostProcessor”)
  公共LifecycleBeanPostProcessor LifecycleBeanPostProcessor () {
  返回新LifecycleBeanPostProcessor ();
  }/* *
  *扫描上下文,寻找所有的Advistor(通知器)
  *将这些顾问应用到所有符合切入点的Bean中。
  */@ bean
  公共DefaultAdvisorAutoProxyCreator DefaultAdvisorAutoProxyCreator () {
  DefaultAdvisorAutoProxyCreator proxyCreator=new DefaultAdvisorAutoProxyCreator ();
  proxyCreator.setProxyTargetClass(真正的);
  返回proxyCreator;
  }/* *
  *匹配所有加了Shiro认证注解的方法
  */@ bean
  公共AuthorizationAttributeSourceAdvisor AuthorizationAttributeSourceAdvisor (SecurityManager SecurityManager) {
  AuthorizationAttributeSourceAdvisor顾问=new AuthorizationAttributeSourceAdvisor ();
  advisor.setSecurityManager (securityManager);
  返回顾问;
  }
  } 
  

3,域对象配置

  
 <代码> @ component
  公开课UserRealm延伸AuthorizingRealm {
  @
  私人SysUserMapper SysUserMapper;
  @
  私人SysMenuMapper SysMenuMapper;/* *
  *授权(验证权限时调用)
  *获取用户权限集合
  */@Override
  公共AuthorizationInfo doGetAuthorizationInfo
  (PrincipalCollection主体){
  SysUserEntity用户=(SysUserEntity) principals.getPrimaryPrincipal ();
  如果(用户==null) {
  把新UnknownAccountException(“账号不存在”);
  }
  List

SpringBoot2整合Shiro框架,实现用户权限管理