1.EhCacheManager EhCache缓存管理也可将shiro session存入redis中

    @Beanpublic EhCacheManager getEhCacheManager() {EhCacheManager em = new EhCacheManager();em.setCacheManagerConfigFile("classpath:ehcache-shiro.xml");return em;}

ehcache-shiro.xml中的配置

<?xml version="1.0" encoding="utf-8"?><ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd"><diskStore path="java.io.tmpdir"/><defaultCache maxElementsInMemory="10000" eternal="false" timeToIdleSeconds="30" timeToLiveSeconds="30" overflowToDisk="false"/><!--配置自定义缓存maxElementsInMemory:缓存中允许创建的最大对象数eternal:缓存中对象是否为永久的,如果是,超时设置将被忽略,对象从不过期。timeToIdleSeconds:缓存数据的钝化时间,也就是在一个元素消亡之前,两次访问时间的最大时间间隔值,这只能在元素不是永久驻留时有效,如果该值是 0 就意味着元素可以停顿无穷长的时间。timeToLiveSeconds:缓存数据的生存时间,也就是一个元素从构建到消亡的最大时间间隔值,这只能在元素不是永久驻留时有效,如果该值是0就意味着元素可以停顿无穷长的时间。overflowToDisk:内存不足时,是否启用磁盘缓存。memoryStoreEvictionPolicy:缓存满了之后的淘汰算法。--><cache name="erpCache"maxElementsInMemory="10000"eternal="true"overflowToDisk="false"timeToIdleSeconds="0"timeToLiveSeconds="600"memoryStoreEvictionPolicy="LFU" />
</ehcache>

2.配置 LifecycleBeanPostProcessor(管理shiro Bean的生命周期)

 public LifecycleBeanPostProcessor getLifecycleBeanPostProcessor() {return new LifecycleBeanPostProcessor();}

3.配置 DefaultAdvisorAutoProxyCreator(用来扫描上下文,寻找所有的Advistor,将这些Advistor应用到符合其定义的切入点的Bean中)

 @Beanpublic DefaultAdvisorAutoProxyCreator getDefaultAdvisorAutoProxyCreator() {DefaultAdvisorAutoProxyCreator daap = new DefaultAdvisorAutoProxyCreator();daap.setProxyTargetClass(true);return daap;}

4.配置SecurityManager (管理器,管理subject及其相关的登陆验证,授权等,需配置realm和缓存管理)

    @Bean(name = "securityManager")public DefaultWebSecurityManager getDefaultWebSecurityManager(SystemAuthorizingRealm realm) {DefaultWebSecurityManager dwsm = new DefaultWebSecurityManager();dwsm.setRealm(realm);
//      <!-- 用户授权/认证信息Cache, 采用EhCache 缓存 ,此处是使用EhCache,可换成redis缓存--> dwsm.setCacheManager(getEhCacheManager());return dwsm;}

5.配置 AuthorizationAttributeSourceAdvisor(开启shiro spring aop 权限注解支持,即:@RequiresPermissions(“权限code”)

    @Beanpublic AuthorizationAttributeSourceAdvisor getAuthorizationAttributeSourceAdvisor(DefaultWebSecurityManager securityManager) {AuthorizationAttributeSourceAdvisor aasa = new AuthorizationAttributeSourceAdvisor();aasa.setSecurityManager(securityManager);return aasa;}

6.配置shiroFilter

    @Bean(name = "shiroFilter")public ShiroFilterFactoryBean getShiroFilterFactoryBean(DefaultWebSecurityManager securityManager, UserService userService,MaterialCategoryService materialCategoryMapper,PermissionsServcie permissionsServcie,OrgService orgService) {ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();// 必须设置 SecurityManager  shiroFilterFactoryBean.setSecurityManager(securityManager);// 如果不设置默认会自动寻找Web工程根目录下的"/login.jsp"页面shiroFilterFactoryBean.setLoginUrl("/login");// 登录成功后要跳转的连接shiroFilterFactoryBean.setSuccessUrl("/user");shiroFilterFactoryBean.setUnauthorizedUrl("/403");//设置过滤链的私有方法loadShiroFilterChain(shiroFilterFactoryBean, userService,materialCategoryMapper,permissionsServcie,orgService);return shiroFilterFactoryBean;}

7.private loadShiroFilterChain 私有过滤链定义,供6使用

/*** 加载shiroFilter权限控制规则(从数据库读取然后配置)*/private void loadShiroFilterChain(ShiroFilterFactoryBean shiroFilterFactoryBean, UserService userService, MaterialCategoryService materialCategoryMapper, PermissionsServcie permissionsServcie, OrgService orgService) {//拦截规则,//CaptchaFormAuthenticationFilter extends FormAuthenticationFilter(shiro认证)//MapLogoutFilter  extends org.apache.shiro.web.filter.authc.LogoutFilter(shiro Logout)Map<String, Filter> filters = shiroFilterFactoryBean.getFilters();filters.put("authc", new CaptchaFormAuthenticationFilter(userService,materialCategoryMapper, permissionsServcie,orgService));filters.put("logout", new MapLogoutFilter());/// 下面这些规则配置最好配置到配置文件中 ///Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();// authc:该过滤器下的页面必须验证后才能访问,它是Shiro内置的一个拦截器org.apache.shiro.web.filter.authc.FormAuthenticationFilterfilterChainDefinitionMap.put("/myCode/**", "authc");// 这里为了测试,只限制/user,实际开发中请修改为具体拦截的请求规则// anon:它对应的过滤器里面是空的,什么都没做logger.info("##################从数据库读取权限规则,加载到shiroFilter中##################");filterChainDefinitionMap.put("/user/edit/**", "authc,perms[user:edit]");// 这里为了测试,固定写死的值,也可以从数据库或其他配置中读取//什么请求对应什么拦截规则filterChainDefinitionMap.put("/login", "authc");filterChainDefinitionMap.put("/logout", "logout");filterChainDefinitionMap.put("/**", "anon");//anon 可以理解为不拦截shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);}

springboot+shiro:ShiroConfiguration配置相关推荐

  1. springboot + shiro的配置

    第一次写博客好紧张,为了使自己使用过的技术不被忘记,在此将一些配置方法记下来,方便自己复习 呵呵 今天写的是springboot+shiro的配置 首先需要在application.yml的配置文件中 ...

  2. 案例代码:springboot+shiro配置同一用户多设备登录最大会话数

    另一链接: springboot+springsecurity配置登录后踢出前一个登录用户 1.自定义登陆过滤器类: /*** 登录帐号控制过滤器* */ public class KickoutSe ...

  3. SpringBoot Shiro 配置自定义密码加密器

    SpringBoot Shiro 配置自定义密码加密器 自定义认证加密方式 /*** 自定义认证加密方式*/ public static class CustomCredentialsMatcher ...

  4. springboot+shiro+cas实现单点登录之shiro端搭建

    github:https://github.com/peterowang/shiro-cas 本文如有配置问题,请查看之前的springboot集成shiro的文章 1.配置ehcache缓存,在re ...

  5. 3-8 基于SpringBoot连接数据库与配置MyBatis实操 创建表sql

    11                    13-8 基于SpringBoot连接数据库与配置MyBatis实操 springSecurity提供了     现成的基于内存管理的类 shiro则必须自 ...

  6. SpringBoot+Shiro实现登陆拦截功能

    上一章讲到使用自定义的方式来实现用户登录的功能,这章采用shiro来实现用户登陆拦截的功能. 首先介绍下Shiro:Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码 ...

  7. springboot+shiro前后端分离过程中跨域问题、sessionId问题、302鉴权失败问题

    写在前面:2020年2月29号修改该文章,之前针对302鉴权失败问题的解决方案存在 "WebUtils.toHttp 往返回response写返回值的时候出现回写跨域问题".现已进 ...

  8. springboot shiro和freemarker集成之权限控制完全参考手册(跳过认证,登录由三方验证,全网首发)...

    本文主要考虑单点登录场景,登录由其他系统负责,业务子系统只使用shiro进行菜单和功能权限校验,登录信息通过token从redis取得,这样登录验证和授权就相互解耦了. 用户.角色.权限进行集中式管理 ...

  9. json web token没有哪个成分_【分享项目】给你看看我们公司的登录认证是怎么做的?!(SpringBoot+Shiro+Token+Redis)...

    背景交代 以前项目中权限认证没有使用安全框架,都是在自定义filter中判断是否登录以及用户是否有操作权限的.最近开了新项目,搭架子时,想到使用安全框架来解决认证问题,spring security太 ...

  10. SpringBoot + Shiro 缓存记住密码

    一般来讲,记住密码的基本处理,就是把用户的一些基本信息(密码)存入浏览器的Cookie,下次登录的时候优先验证Cookie,后端做处理:以此来实现记住密码的功能!使用shiro自带的RememberM ...

最新文章

  1. 怎样用c语言解一元一次方程,问一道算法题目(解一元一次方程的问题)
  2. “拒绝在 iPad 上运行 Xcode!”
  3. 基于单片机的调光控制器设计
  4. Spring Boot框架表达式注入漏洞
  5. 微博环境下利用综合策略构建推荐引擎
  6. oracle 列级外键,Oracle外键列上是否需要索引?
  7. 数据结构期末复习之选择排序
  8. CPU位数、操作系统位数、应用程序位数浅析
  9. python自动压图贴图到Excel小工具
  10. ai第二次热潮:思维的转变_基于属性的建议:科技创业公司如何使用AI来转变在线评论和建议
  11. Axure RP 9基础教程(3)——添加图标元件
  12. 郝斌的数据结构学习笔记(1)概述,算法,指针的概念,结构体,线性结构,离散存储,链表
  13. C++ Primer 5th Edition(英文版)kindle.mobi
  14. 电工电子技术实训QY-DQJ07
  15. gitlab的账号注册以及分组
  16. 基于 SpringBoot 和 webSocket 的匿名聊天室
  17. 《S.忒修斯之船》读后感600字心得体会
  18. 英文和中文在计算机的优劣,汉语和英语优缺点的比较(转载)
  19. python如何绘制饼图_Python使用Plotly绘图工具,绘制饼图
  20. 形式逻辑(02)逻辑概述 负判断

热门文章

  1. mysql 主主结构_高性能mysql主主架构
  2. c语言atoll函数怎么用_C ++中带有示例的atoll()函数
  3. c++stl和std_std :: rotate()函数以及C ++ STL中的示例
  4. Java Vector setElementAt()方法与示例
  5. android 默认浏览器 视频播放 二维码,Android调用系统默认浏览器访问的方法
  6. c语言春考题目,PAT 2017年春考乙级真题(1066. 图像过滤)(C语言)
  7. portlet java_Java Portlet 规范概述
  8. html 轮播图的鼠标事件,这是图片轮播的代码 html+css,怎么加上鼠标悬停移出继续功能?...
  9. nextdate函数白盒测试问题 软件测试_软件测试基本常识
  10. python中八进制_在Python中以八进制格式输入数字