Apache Shiro去掉URL中的JSESSIONID
来源:互联网 发布:淘宝注册需要打电话吗 编辑:程序博客网 时间:2024/06/06 19:50
使用shiro过程中,有时url会遇到JSESSIONID这个小尾巴,去掉小尾巴的解决方法:
1、其实shiro在1.3.2版本已经解决了这个问题,只需配置一下参数即可。
!-- 会话管理配置 --><bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager"> <!-- 会话超时时间,单位:毫秒 20m=1200000ms, 30m=1800000ms, 60m=3600000ms--> <property name="globalSessionTimeout" value="1800000"/> <property name="sessionValidationInterval" value="1200000"/> <!-- 去掉 JSESSIONID --> <property name="sessionIdUrlRewritingEnabled" value="false" /> <property name="sessionValidationSchedulerEnabled" value="true"/> <property name="sessionDAO" ref="sessionDAO"/> <property name="sessionIdCookie" ref="sessionIdCookie"/> <property name="sessionIdCookieEnabled" value="true"/></bean>
2、低于1.3.2版本处理方法:(原理)在我们点击登陆之后会访问DefaultSecurityManager构建Subject。创建Subject之前会做很多事(创建cookie和session等等)其中会访问一下DefaultWebSessionManager的getReferencedSessionId方法。方法里面判断cookie里面是否有sessionid。肯定是没有的啦所以不会向request里面存放ShiroHttpServletRequest的3个静态属性。然后在org.apache.shiro.web.filter.authc.FormAuthenticationFilter登陆成功跳转页面的时候。issueSuccessRedirect方法里面会判断request是否有ShiroHttpServletRequest.COOKIE_SESSION_ID_SOURCE如果有直接跳转到成功页面。具体判断的代码在ShiroHttpServletRequest里面的isRequestedSessionIdFromURL方法上。如果没有会在跳转成功页面url后面加上JSESSIONID。所以url上就多出了JSESSIONID.然后跳转首页时又会访问DefaultSecurityManager构建Subject。同样会进DefaultWebSessionManager的getReferencedSessionId方法这个时候sessionid有值所以request里面存放了
ShiroHttpServletRequest.COOKIE_SESSION_ID_SOURCE。这就是为什么我们删掉JSESSIONID他又不加上的原因。因为你后面每次访问。构建subject的时候sessionid有值request的里面也有值他就不会在url上加JSESSIONID了啊。假设我们删除浏览器cookie这个时候没有了sessionid。我们访问当前地址。同样会创建Subject。由于sessionid没有了所以request里面就不会存值了。然后会进入org.apache.shiro.web.filter.authc.UserFilter判断subject是否有认证信息。没有会通过saveRequestAndRedirectToLogin跳转到登陆页面。saveRequestAndRedirectToLogin里面判断request是否有值没值又会在跳转页面的url上加上JSESSIONID。然后进入登陆界面的时候构建subject 创建session request里面存值。好了说完了。看不懂得自己脑补把。
我的办法在每次跳转之前就判断sessionid是否有值。因为每次跳转之前subject就已经创建了session。至于如果禁用cookies。同样还是会在url上加上jsessionid。我们只是把判断给至前了。并没有修改原有逻辑。具体代码如下
另一种解决办法:
- Apache Shiro去掉URL中的JSESSIONID
- Apache Shiro去掉URL中的JSESSIONID
- Java去掉 URL 中的 jsessionid
- 去掉shiro登录时url里的JSESSIONID
- 去掉shiro登录时url里的JSESSIONID
- 去掉shiro登录时url里的JSESSIONID
- shiro重定向时URL中的JSESSIONID问题
- 去掉地址栏中的jsessionid
- 去掉地址栏中的jsessionid
- 去掉url 后面的jsessionid
- url中的jsessionid解释
- url中的jsessionid
- 过滤URL中的JSESSIONID
- url中的jsessionid解释
- url中的jsessionid解释
- url中的jsessionid解释
- 去掉 URL 中讨厌的 jsessionid
- Spring boot中去掉URL后面的jsessionid
- 基于层次化多模态LSTM的视觉语义联合嵌入
- 基于mvc模式的应用框架之Hibernate(三)
- Oracle创建表空间、用户、分配权限、导出、导入数据
- bzoj3039 玉蟾宫【单调栈】
- javascript高级程序设计笔记5-封装
- Apache Shiro去掉URL中的JSESSIONID
- 技巧丨PDF图片提取的方法
- 『干货』Go语言使用Docker Remote API ,举个栗子!
- 1.13 并发编程
- SpringMVC中RequestMapping用于类上时页面跳转路径不对 登录拦截失败
- [RK3128][Android 6.0] PWM backlight注册及调用流程
- JAVA 反射(3):类内部信息获取
- git 文件管理
- 每天一个linux命令(7):mv命令