JSESSIONID https://blog.csdn.net/aofavx/article/details/51701012に史郎ログインURLを削除する場合

フォーラムを検索し、ソースコードの分析を通じて、プラスにShiroHttpServletResponseで確認しました。

したがってShiroHttpServletResponseクラス継承、次いでShiroFilterFactoryBeanを書き換えることができ、対応する方法がJSESSIONID部分が除去添加覆います。

    ShiroHttpServletResponse書き換え
    Javaコードがある


ShiroHttpServletResponse {延びパブリッククラスMyShiroHttpServletResponse 
    パブリックMyShiroHttpServletResponse(HttpServletResponseのラップされた、のServletContextコンテキスト、ShiroHttpServletRequest要求){ 
        スーパー(ラップされた、コンテキスト、要求); 
    }   
    @Overrideは、
    文字列toEncoded(URL文字列、文字列セッションID){保護された
        IFは、(( == URL ヌル)||(セッションID == NULL ))
             リターン(URL)、
        文字列のパス =URL; 
        文字列のクエリ =「」; 
        文字列のアンカー =「」;
        int型質問= url.indexOf( '?' );
        もし(質問> = 0 ){ 
            パス = url.substring(0 、質問)。
            クエリ = url.substring(質問); 
        } 
        int型ポンド= path.indexOf( '#' )。
        もし(ポンド> = 0 ){ 
            アンカー = path.substring(ポンド)。
            パス = path.substring(0 、ポンド)。
        } 
        のStringBuilder SB= 新規新規のStringBuilder(パス);
         // オーバーライドtoEncoded方法、コードのコメント行はJESSIONIDを生成しません。
//         。IF(sb.length()> 0){//セッションID paramは初めてではないことができます
//             ( ";"); sb.append 
//             sb.append(DEFAULT_SESSION_ID_PARAMETER_NAME); 
//             sb.append( "="); 
//             sb.append(セッションID); 
//         } 
        sb.append(アンカー); 
        sb.append(クエリ); 
        リターン(sb.toString()); 
    } 
}


 2 。拡張ShiroFilterFactoryBean、新規の使用MyShiroHttpServletResponse。

Javaコード

パブリッククラスMyShiroFilterFactoryBeanはShiroFilterFactoryBean {延び

    @Override   
      publicクラスgetObjectType(){   
        戻りMySpringShiroFilter.classと、  
      } 

    @Overrideは
    AbstractShiroFilterしたcreateInstance()は例外をスロー{保護

        セキュリティマネージャセキュリティマネージャ = getSecurityManager()。
        もし(セキュリティマネージャ== NULL ){ 
            文字列MSGは =「セキュリティマネージャのプロパティを設定する必要があります。」;
            スロー 新しいBeanInitializationException(MSG)を、
        } 

        もし(!(SecurityManagerのinstanceofはWebSecurityManager)){ 
            文字列MSG =「セキュリティマネージャはWebSecurityManagerインタフェースを実装していません。」;
            スロー 新しいBeanInitializationException(MSG)を、
        } 
        FilterChainManagerマネージャ = createFilterChainManager()。

        PathMatchingFilterChainResolver chainResolver = 新しいPathMatchingFilterChainResolver(); 
        chainResolver.setFilterChainManager(マネージャ)。

        返す 新しいMySpringShiroFilter((WebSecurityManager)のSecurityManager、chainResolverを)。
    } 

    プライベート静的最終的なクラスMySpringShiroFilterは{AbstractShiroFilterを拡張します  

        保護MySpringShiroFilter(WebSecurityManager webSecurityManager、FilterChainResolverレゾルバ){   
          スーパー()。  
          場合(webSecurityManager == nullの){  
             スロー 新しい、IllegalArgumentExceptionを( "WebSecurityManagerプロパティがnullにすることはできません。" );  
          }   
          setSecurityManager(webSecurityManager)。  
          もし(!レゾルバ= NULL ){   
            setFilterChainResolver(レゾルバ)。  
          }   
        }   

        @Overrideは   
        ServletResponseをwrapServletResponse保護(HttpServletResponseのORIG、ShiroHttpServletRequestリクエスト){   
          リターン 新しい新しいMyShiroHttpServletResponse(ORIG、のgetServletContext()、要求);   
        }   
    } 
}

 

 3。士郎は自分MyShiroFilterFactoryBean(ああ、私は春と史郎の組み合わせを使用)に設定して置き換える。

     < - Webフィルタの史郎- ! > 
    <ビーンID = "shiroFilter"クラス= "com.jsnr.aws.web.shiro.spring.MyShiroFilterFactoryBean"> 
        <プロパティ名= "セキュリティマネージャ" REF = "セキュリティマネージャ" /> 
        <プロパティ名= "loginUrl"値= " /login.jsp "/> 
         <プロパティ名=" unauthorizedUrl "値=" / unauthorized.jsp「/> 
 .....   </豆>

 

 

おすすめ

転載: www.cnblogs.com/xiaozhang666/p/12585747.html