Javawebフィルタは、ユーザログインかどうかを決定するフィルター

転載:https://blog.csdn.net/caodongfang126/article/details/53220080

非常に詳細な書きます:

1 。首先在web.xmlの文件添加フィルタ
     <フィルター>   
        <フィルタ名> wxloginfilter </フィルタ名>   
        <フィルター- クラス > com.src.mian.filter.WXLoginFilter </フィルター- クラス >   
        < 非同期担持さ>  </ 非同期担持さ>   
        の<init-param>要素  
            の<param-name>のエンコーディング</ PARAM名>   
            の<param-value>はUTF- 8 </ PARAM値>   
        </ INIT-param>の  
    </フィルタ>   
    <フィルタ-mapping>   
        <フィルタ名> wxloginfilter </フィルタ名>   
        の<url-pattern> / * </のurl-pattern>   
    </のfilter-mapping> 

2。追加クラスクラスは、フィルターを継承

WXLoginFilter実装フィルター{publicクラスをフィルター継承するクラスのクラスを追加し
    、現在のユーザーはログインできません://識別子を
    NO_LOGIN_NO =文字列"NO_LOGIN_NO"; 
    //除外するURL 
    文字列[] URLパスの後、ここで彼らはへのアクセス権を持って前にログインする必要があります。// 
    String []型excludeUrls =新しいString [ ] { "ギフト/ getgift"、 "ギフト/ userGiftList" 、 "ゲーム/でaddComment"}、 "/ giftInfoギフト"; // 
    
    
    パブリックWXLoginFilter(){ 
        //コンストラクタTODO自動生成されたスタブ
    } 

    / ** 
     * @see破壊フィルタ#()
     * / 公共のボイド破壊(){
         / / TODO自動生成されたメソッドスタブ    } / * *フィルタ
     *分析URLアレイ文字列[]ログexcludeUrlsアクセスURLかどうか
     *のdoFilterをフィルタ#(のServletRequest、ServletResponseを、れるFilterChain)を@see * / 公共
     


    
     
     無効のdoFilter(のServletRequestのServletRequest、ServletResponseをServletResponseを、フィルターチェーンれるFilterChain)スローにIOException、ServletExceptionがを{ 

        HttpServletRequestのリクエスト = (HttpServletRequestの)のServletRequest。
        HttpServletResponseの応答 = (HttpServletResponseの)たServletResponse。
        HttpSessionのセッション = でrequest.getSession(); 
        文字列URI = request.getRequestURI()。
        
        // するSystem.out.println( "フィルタURL:" + URI)。
        // するSystem.out.println( "セッションID:" + session.getId()); 
        ブールパス= ;
        もし excludeUrls(!=NULL ){
             ため(文字列のURL:excludeUrls){
                 場合(uri.indexOf(URL)> - 1 ){ 
                    通過 = 。
                    破ります; 
                } 
            } 
        }         
        もし(!{パス)
            filterChain.doFilter(のServletRequest、ServletResponseを)。
        } {
             場合(session.getAttribute(" userKey_session ")!= nullの){
                //System.out.println( "userKey_session:" + session.getAttribute( "userKey_session")); 
                filterChain.doFilter(リクエスト、レスポンス)。
            } { 
                文字列requestType = request.getHeader(" X-で要求" )。 
                // 判断是否是アヤックス请求
                場合(requestType =!ヌル && " のXMLHttpRequest " .equals(requestType)){ 
                    response.getWriter()書き(。この.NO_LOGIN_NO)。
                } { 
                    response.sendRedirect(要求。" /ユーザー/ログイン" ); 
                } 
                を返します
            } 
        } 
    } 

    / * *初始化
     * @seeフィルタ#1のinit(に、FilterConfig)
     * / 公共ボイドのinit(に、FilterConfig fConfig)ServletExceptionがスロー{
         // TODO自動生成方法スタブを    } 
}
     

 

おすすめ

転載: www.cnblogs.com/gxlaqj/p/11415685.html