最近,将一个单一的maven项目拆分为多maven模块的项目时候, 不知道是什么原因,导致集成shiro的时候出现如下异常信息:
最后在网络上度娘了下,
1、有的说是shiro的版本问题,但是项目中因为引用了hibernate-ehcache和shiro-ehcache 这2个包,自己就带了shiro-core-2.4.3.jar包,不知道是shiro的,还是hibernate依赖的,所以,直接不用原来的shiro-core包,自己直接在maven中添加依赖shiro-core-2.4.8.jar(必须2.5.0以下的),可以解决这个问题;
2、另外就可以修改配置文件来解决:
<!-- 安全管理器 -->
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="realm" ref="shiroDbRealm" />
<property name="cacheManager" ref="cacheManager"/>
</bean>
<!-- 缓存管理器,使用EhCache实现-->
<bean id="cacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">
<!--<property name="cacheManagerConfigFile" value="classpath:ehcache-shiro.xml"/>-->
<property name="cacheManager" ref="ehCacheManager"></property>
</bean>
将上边的的cacheManager 管理自己实现直接交给spring来实现的,并且spirng让ehcache 共享(必须);具体配置cacheManager引用如下配置即可;
<bean id="ehCacheManager" class ="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation" value="classpath:ehcache-shiro.xml" />
<property name="shared" value="true"></property> (关键)
</bean>
这样配置也可以解决相关问题。
=======================shiro相关说明=============================================
securityManager是Shiro配置的核心,一般情况下可以做如下配置,其中只有realm是必须配置的
<!-- 安全管理器 -->
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="realm" ref="shiroDbRealm" />
<property name="sessionManager" ref="sessionManager"/>
<property name="cacheManager" ref="cacheManager"/>
<!--<property name="cacheManager" ref="memoryCacheManager"/>-->
</bean>
1.realm
realm中两个方法 AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken)登陆认证 和 AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals)权限验证 的实现位置,基本上都需要自己实现
个别情况下,比如当使用Shiro-Cas的时候,doGetAuthenticationInfo方法不需要自己实现
2.SessionManager
SessionManager默认是 ServletContainerSessionManager
当使用ServletContainerSessionManager时,验证登陆返回值AuthenticationInfo,中的Principal会被保存到HttpSession中,最后构造的shiro.session接口实现类中一个属性为HttpSession
如果使用DefaultWebSessionManager时,会用到SessionDAO,默认的实现是MemorySessionDAO(在其父类DefaultSessionManager中可以看到),如果使用MemorySessionDAO,Principal信息会被保存到MemorySessionDAO维护的一个 ConcurrentMap<Serializable, Session> sessions 中,如果要自己实现中央缓存,就重写该一个AbstractSessionDAO的子类并实现相关方法。
注意:
1、本地缓存通过EhCache实现,失效时间一定要远小于Redis失效时间,这样本地失效后,会访问Redis读取,并重新设置Redis上会话数据的过期时间。
2、redisSessionDao是继承CachingSessionDAO来实现,可以减少访问redis的频度;
这里有个可能出现bug的地方,可以通过配置sessionIdCookie属性,解决被服务器重写cookie中会话ID,导致会话丢失的问题(默认是“JSESSIONID”,跟tomcat和jetty一样)
<!-- sessionManager 引入session保存的Dao和session命名 -->
<bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">
<!-- 设置全局会话超时时间,默认30分钟(1800000)-->
<property name="globalSessionTimeout" value="30000"/>
<!-- 是否在会话过期后会调用SessionDAO的delete方法删除会话 默认true-->
<property name="deleteInvalidSessions" value="true"/>
<property name="sessionDAO" ref="redisSessionDao"/>
<!-- 是否开启会话验证器任务 默认true -->
<property name="sessionValidationSchedulerEnabled" value="true"/>
<property name="sessionValidationScheduler" ref="sessionValidationScheduler"/>
<!-- 会话验证器调度时间 ,因为上边的 sessionValidationScheduler 中已经配置的调度时间,故如此处不在重复-->
<!--<property name="sessionValidationInterval" value="3600000"/>-->
<property name="sessionIdCookie" ref="sessionIdCookie"/>
</bean>
<!-- 配置session名字 避免与tomcat,jetty等session冲突默认JSESSIONID,修改用于防止访问404页面时,容器生成的标识把shiro的覆盖掉 -->
<bean id="sessionIdCookie" class="org.apache.shiro.web.servlet.SimpleCookie">
<constructor-arg name="name" value="SHIROSESSIONID"/>
</bean>
<!-- session 序列化存储 -->
<bean id="redisSessionDao" class="com.ch.bigdata.common.redis.service.RedisSessionDAO"></bean>
所以memcached-session-manager做负载均衡 和 DefaultWebSessionManager 是冲突的,可以考虑自己实现一个SessionDAO来完成负载均衡中会话管理功能
3.CacheManager
cacheManager的作用是保存doGetAuthorizationInfo(权限验证)中的返回结果,如果没有配置cacheManager,每一次权限认证都需要重新调用该方法。
======shiro 权限框架在session 失效后,点击某个链接,或刷新页面,重新登录后不跳转到成功页面====
遇到的场景是,访问项目名,类似http://localhost:8080/xxx/,shiro会通过过滤器,进入你配置的loginUrl,然后登录成功后,它会记住你之前访问的链接,那么就自然进入了http://localhost:8080/xxx/,这个时候如果你的拦截器配置(filterChainDefinitions)没有配置好/的访问权限的话,就导致页面加载不到rc.contextPath,自己配置的successUrl都没有用,除非重写formAuthenticationFilter;
解决方法见这篇文章:
http://www.cnblogs.com/sevenlin/p/sevenlin_shiro20150924.html (Shiro登录成功之后跳到指定URL)这篇文章已经说明了原因了!
相关推荐
1,说明一下步骤,需要在原来基础新增三个文件 2,新增CustomToken,重写UsernamePasswordToken免密登录调用方法和密码登录调用方法都在里面。 3,新增MyRetryLimitCredentialsMatcher,重写...
说明 功能: 用户模块 日志模块 考勤模块 工作流模块 请假 岗位 会议申请 菜单 。。。 项目经过严格测试,确保可以运行!基于springboot+mybatis+shiro+activity构建的企业办公Oa系统,适合个人学习,本科毕业设计...
项目简介:此项目只是简单的集成spring+springmvc+shiro+ehcahce 二: 步骤说明: 1:项目集成spring 在web.xml中配置spring容器的监听器。 2:项目集成springmvc 在web.xml中配置前端控制器 3:项目集成...
## cas集成说明 1.首先采用的是查数据库的方式来校验用户身份的,在cas/WEB-INF/deployerConfigContext.xml中第135行构建了这个类型 ``` xml <!-- 设置密码的加密方式,这里使用的是MD5加密 --> class="org.jasig...
SSM+shiro,简单集成项目,实现shiro安全验证,内部附有文档说明,项目为maven项目,通俗易懂,希望对大家有帮助
说明:参考了公司的一些项目以及springside,集成了一些常用框架,特色功能如下: shiro: 1.支持shiro数据库配置权限。 2.支持在方法级别上控制权限。 quartz: 1.页面配置Trigger以及选择Job任务来开启定时器。 2...
主要解决是之前说的问题:Shiro 教程,关于最近反应的相关异常问题,解决方法合集。 项目在本页面的附件中提取。 一、Cache配置修改。 配置文件(spring-cache.xml )中已经修改为如下配置: <!-- redis ...
2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。...
8.0.0+项目模块划分模块释义shiro-core核心业务类模块,提供基本的数据操作,工具处理等shiro-admin后台管理模块数据库模型使用说明使用IDE介绍本项目新建数据库CREATE DATABASE shiro;引进数据库docs/db/shiro.sql...
接口说明,支持两种方式,两套接口 1.使用JWT生成Token,使用shiro实现鉴权 2.使用oauth2生成token,spring security实现鉴权 使用JWT生成Token,使用shiro实现鉴权 UMS返回参数说明 名称 类型 说明 type int 请求...
基于SSM+shiro+maven+bootstrap的图书馆管理系统源码+项目说明.zip # SSM_Project ## 简介 #### 项目主要用到的技术是SSM+shiro+maven+bootsrap+mysql框架,shir安全框架主要用于用户登陆的验证,权限控制。 ##...
1、前后端分离思想 ...后端负责业务/数据接口,前端负责展现/交互逻辑,...2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当
* [SpringBoot+shiro(REAMDME.md RBAC 参考链接)](./springboot-shiro/README.md) * [SpringBoot+redis](./springboot-redis/README.md) * [SpringBoot+security](./springboot-security/README.md) * [SpringBoot...
大学生课程设计毕业设计项目、系统开发,供计算机等专业同学参考,提供说明材料+源代码 大学生课程设计毕业设计项目、系统开发,供计算机等专业同学参考,提供说明材料+源代码 大学生课程设计毕业设计项目、系统开发...
SpringMVC集成Swagger,最干净的一个Demo。里面有步骤说明。非常简单。运行测试OK。
【资源说明】 1、基于spring boot + element-ui的后台管理系统源码+项目说明.zip 2、该资源包括项目的全部源码,下载可以...* 集成shiro权限管理,基于redis缓存权限 * 预设模块:用户管理、角色管理、权限管理 * ...
就没有比它更简洁的画面了,基于springboot2.16,mybatis-plus,shiro,layui,freemarker,实现了maven打包罐加密,防止反编译,加载外部第三方库,加载外部配置文件,扩展jar包体积,高效部署,集成websocket,...
说明 文档尽量原文抄录,类名、包名未做任何修改,资源文件加上了代表章节的目录,如第三章的资源文件放在resources/ch3下; 为了方便读者拷贝源码,文中源码片段可能增加import语句; 为了显示语法高亮,文中源码...
集成开发工具: Eclipse EE_4.7 编译环境:JDK_1.8 Web服务器:Tomcat_9.0 数据库:MySQL_5.7.23 【系统框架】 spring框架 springmvc框架 mybatis框架 Logback日志框架 安全验证框架 maven框架 layui前端框架 shiro...
项目说明 adminlte-boot基于Springboot、Shiro、Mybatis plus、shiro-redis开发的精简后台基础系统。 包含用户管理,角色管理,菜单管理,定时任务,图标工具,文章分类,文章列表等基础业务模块。 使用AdminLTE作为前端...