解决重定向URL中出现sessionID的情况localhost:8080/index;jsessionid=D5C1EE61B97EE2D7098F58A837B82BD4

一.解决方法

 /**
     * 注入 securityManager
     */
    @Bean
    public SecurityManager securityManager(@Qualifier("myShiroRealm") ShiroDbRealm myShiroRealm,@Qualifier("webSessionManager") DefaultWebSessionManager sessionManager) {
        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
        // 设置自定义 realm.
        securityManager.setRealm(myShiroRealm);
        securityManager.setSessionManager(sessionManager);
        /*
         * 关闭shiro自带的session,详情见文档
         * http://shiro.apache.org/session-management.html#SessionManagement-StatelessApplications%28Sessionless%29
         */
        DefaultSubjectDAO subjectDAO = new DefaultSubjectDAO();
        DefaultSessionStorageEvaluator defaultSessionStorageEvaluator = new DefaultSessionStorageEvaluator();
        defaultSessionStorageEvaluator.setSessionStorageEnabled(false);
        subjectDAO.setSessionStorageEvaluator(defaultSessionStorageEvaluator);
        securityManager.setSubjectDAO(subjectDAO);
        return securityManager;
    }

    /**
     * 解决shiro的URL中出现sessionID的情况
     * EG: localhost:8080/toLogin;jsessionid=D5C1EE61B97EE2D7098F58A837B82BD4
     * https://blog.csdn.net/java_cpp_/article/details/124256865
     * @return
     */
    @Bean
    @Qualifier("webSessionManager")
    public DefaultWebSessionManager sessionManager() {
        DefaultWebSessionManager defaultWebSessionManager = new DefaultWebSessionManager();
        defaultWebSessionManager.setSessionIdUrlRewritingEnabled(false);
        return defaultWebSessionManager;
    }

二.复现场景

项目中用到一个免密登录的场景,该场景为,根据传递过来的用户名密码以及指定的url登录沿海新增成功后进行跳转,跳转过程中重定向到index路径中,然而出现了下面的场景:

即URL中莫名出现了一个jsessionid,链接跳转变成了400,导致重定向失败。

仔细观察上一个链接,即免密登录链接会发现在Location中存在此链接了,也有对用的jsessionid。

所以想办法解决掉这个jsessionid即可,即为步骤一的操作。

三.原理

1、当访问localhost:8080/,测试shiro进行拦截发现还没登录,则shiro则会在内部进行一个重定向到localhost:8080/toLogin
2、但是server服务器并不知道是shiro的重定向,重定向的请求中没有session、cookie等信息,服务器就会以为是客户端禁用了该功能,所以服务器就自动为其分配一个sessionid
3、所以响应到客户端的url就被添加上了sessionid

或可参考:地址栏JSESSIONID问题-CSDN博客

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值