• 去掉shiro登录时url里的JSESSIONID https://blog.csdn.net/aofavx/article/details/51701012


    经过查找论坛和分析源码,确认了是在ShiroHttpServletResponse里加上的。
    
    因此继承ShiroHttpServletResponse类,覆盖相应方法,再重写 ShiroFilterFactoryBean就可以把添加JSESSIONID部分去掉。
    
        重写ShiroHttpServletResponse
        Java代码
    
    
    public class MyShiroHttpServletResponse extends ShiroHttpServletResponse {
        public MyShiroHttpServletResponse(HttpServletResponse wrapped,ServletContext context, ShiroHttpServletRequest request) {
            super(wrapped, context, request);
        }  
        @Override
        protected String toEncoded(String url, String sessionId) {
            if ((url == null) || (sessionId == null))
                return (url);
            String path = url;
            String query = "";
            String anchor = "";
            int question = url.indexOf('?');
            if (question >= 0) {
                path = url.substring(0, question);
                query = url.substring(question);
            }
            int pound = path.indexOf('#');
            if (pound >= 0) {
                anchor = path.substring(pound);
                path = path.substring(0, pound);
            }
            StringBuilder sb = new StringBuilder(path);
            //重写toEncoded方法,注释掉这几行代码就不会再生成JESSIONID了。
    //        if (sb.length() > 0) { // session id param can't be first.
    //            sb.append(";");
    //            sb.append(DEFAULT_SESSION_ID_PARAMETER_NAME);
    //            sb.append("=");
    //            sb.append(sessionId);
    //        }
            sb.append(anchor);
            sb.append(query);
            return (sb.toString());
        }
    }
    
    
    2.扩展ShiroFilterFactoryBean, 使用新建的MyShiroHttpServletResponse。
    
    Java代码
    
    public class MyShiroFilterFactoryBean extends ShiroFilterFactoryBean { 
    
        @Override  
          public Class getObjectType() {  
            return MySpringShiroFilter.class;  
          } 
    
        @Override
        protected AbstractShiroFilter createInstance() throws Exception {
    
            SecurityManager securityManager = getSecurityManager();
            if (securityManager == null) {
                String msg = "SecurityManager property must be set.";
                throw new BeanInitializationException(msg);
            }
    
            if (!(securityManager instanceof WebSecurityManager)) {
                String msg = "The security manager does not implement the WebSecurityManager interface.";
                throw new BeanInitializationException(msg);
            }
            FilterChainManager manager = createFilterChainManager();
    
            PathMatchingFilterChainResolver chainResolver = new PathMatchingFilterChainResolver();
            chainResolver.setFilterChainManager(manager);
    
            return new MySpringShiroFilter((WebSecurityManager) securityManager, chainResolver);
        }
    
        private static final class MySpringShiroFilter extends AbstractShiroFilter {  
    
            protected MySpringShiroFilter(WebSecurityManager webSecurityManager, FilterChainResolver resolver) {  
              super();  
              if (webSecurityManager == null) {  
                throw new IllegalArgumentException("WebSecurityManager property cannot be null.");  
              }  
              setSecurityManager(webSecurityManager);  
              if (resolver != null) {  
                setFilterChainResolver(resolver);  
              }  
            }  
    
            @Override  
            protected ServletResponse wrapServletResponse(HttpServletResponse orig, ShiroHttpServletRequest request) {  
              return new MyShiroHttpServletResponse(orig, getServletContext(), request);  
            }  
        }
    }
    
     
    
    3.在shiro相关配置里替换成自己的MyShiroFilterFactoryBean(嗯,我是shiro和spring组合用的)
    
        <!-- Shiro的Web过滤器 -->
        <bean id="shiroFilter" class="com.jsnr.aws.web.shiro.spring.MyShiroFilterFactoryBean">
            <property name="securityManager" ref="securityManager"/>
            <property name="loginUrl" value="/login.jsp"/>
             <property name="unauthorizedUrl" value="/unauthorized.jsp"/>
    
     .....  
     </bean>
  • 相关阅读:
    ZooKeeper基本原理
    Ubuntu上部署C# 网站 步骤简单记录
    代码生成助手
    微信授权封装,欢迎使用
    c#微信开发,使用JS-SDK自定义分享功能,分享朋友圈,分享给朋友等
    ab.exe使用
    【分享·微信支付】 C# MVC 微信支付教程系列之公众号支付
    SVN服务器搭建(一)
    MVC四大筛选器—ActionFilter&ResultedFilter
    MySQL参数化查询的IN 和 LIKE
  • 原文地址:https://www.cnblogs.com/xiaozhang666/p/12585747.html
Copyright © 2020-2023  润新知