去除jessionid时shiro设置sessionIdUrlRewritingEnabled报错,超级坑

简介: 使用shiro进行权限认证时,登录地址第一次访问总是自动携带JESSIONID,现在需要把它去掉不能显示。

项目场景:

使用shiro进行权限认证时,登录地址第一次访问总是自动携带JESSIONID,现在需要把它去掉不能显示。


问题描述:

首先翻遍百度发现大多数解决方案就是在DefaultWebSecurityManager注入时设置sessionManager。该方法还需要 shiro 1.3.2以上才行,巧了我的1.3.0肯定不行,直接去pom改下版本号。

注解方式:

    @Bean
    public DefaultWebSessionManager sessionManager(){
        DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
        sessionManager.setSessionIdUrlRewritingEnabled(false);
        return sessionManager;
    }
    @Bean
    public DefaultWebSecurityManager securityManager(){
        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
        securityManager.setSessionManager(sessionManager());
        return securityManager;
    }


xml方式:

    <bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">
    <property name="sessionIdUrlRewritingEnabled" value="false"/>
  </bean>
  <!-- Shiro安全管理器 -->
  <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
    <property name="sessionManager" ref="sessionManager"/>
  </bean>


xml方式记得加包扫描,我的:

<context:component-scan base-package="config" />


然后运行项目,报错和之前一样,反正就是没有getter方法。


原因分析:

在debug时,发现项目里有三个版本的shiro,有两个是其他模块的,所以就没管,但是debug时发现行数对不上,下了源码后,发现this.sessionIdUrlRewritingEnabled = true;这行都打不上断点,然后rebuild项目,mvn clean install重新打包,重启idea都用上了,然后能打断点了,但是debug开始后,断点图标又变成圆圈斜杠,根本不是进的我当前项目的shiro版本。

最后只能猜测是不是多版本同时存在有什么问题。


解决方案:

发现三个版本中,有个版本为很老的1.2.4,但是整个项目根本没地方引入,然后看仓库还是shiro-all的方式引入的,于是暂时修改下名字,运行项目后果然能跑了!!!

3b87db8ebe7c43f897317e58bee914e0.png



最后百度发现shiro最好不要直接引入all,按需引入,不然在maven会出问题,参考链接:http://www.nutz.cn/yvr/t/5alnnrtujchnup2ul0fe5eidf0


坑的要死,搞了几小时!!!


目录
相关文章
|
存储 缓存 安全
01 还在手写filter进行权限校验?尝试一下Shiro吧
01 还在手写filter进行权限校验?尝试一下Shiro吧
163 0
01 还在手写filter进行权限校验?尝试一下Shiro吧
|
Java 数据格式 XML
在Struts中对用户输入信息的校验方法对比:validate 和validator
在Struts中对用户输入信息的校验一般在FromBean中进行(除非需要访问数据库进行诸如登录信息的校验,因为这是Action的工作),本文将阐述如何在Struts中实现可配置的信息校验。 一、在FormBean中手工实现 最简单的方法是直接在FormBean中重写ActionForm类的validate方法,validate方法签名如下: public ActionErrors v
1101 0
【shiro】关于shiro匹配URL的小用法
今天涉及到这个地方 1.登录请求需要带着username和password一起过去,这样的话发出的请求就是:http://localhost:8080/wxSecond/welcome/login.htmls?username=123&password=123 而shiro的配置中,还在担忧仅仅配置/welcome/login.
1041 0
|
存储
​SpringSecurity-7-自定义AuthenticationProvider实现图形验证码
上一章节我们介绍了如何使用过滤器(Filter)实现图形验证,这是属于Servlet层面,比较简单容易理解。那么这次我们介绍SpringSecurity提供的另一种比较高端的实现图形化验证码,这就是AuthenticationProvider自定义认证。
185 0
|
前端开发 JavaScript 数据安全/隐私保护
MVC验证03-自定义验证规则、禁止输入某些值
原文:MVC验证03-自定义验证规则、禁止输入某些值 本文继续体验自定义验证规则,需求是禁止输入某些值。本文与前2篇相关,请参考:MVC验证01-基础、远程验证   MVC验证02-自定义验证规则、邮件验证      自定义验证特性继承ValidationAttribute,并实现IClientValidatable接口 展开using System.
775 0
|
6月前
|
前端开发 JavaScript 数据安全/隐私保护
前端JS正则校验密码之3种实现方式
这篇文章展示了三种使用JavaScript正则表达式来校验密码的方法,密码需要满足包含大写字母、小写字母、数字及特殊字符,并在8到16位之间,同时提供了示例代码和实现效果。
206 1
前端JS正则校验密码之3种实现方式
|
JSON 安全 搜索推荐
​SpringSecurity-5-自定义登录验证
​SpringSecurity-5-自定义登录验证
183 0
boot 中自定义shiro过滤器的拦截顺序
@boot 中filter SecurityUtils.getSubject()No SecurityManager accessible
379 0
boot 中自定义shiro过滤器的拦截顺序

热门文章

最新文章