ログイン インターセプター (リクエストをインターセプトし、異なるリクエストが異なるログイン ページに入ります)

ログインインターセプター:ShiroInterceptorFilterFormAuthenticationFilterから継承

傍受される前にリクエスト パスを取得します。

WebUtils.getSavedRequest(リクエスト);

文字列 URL = 保存されたリクエスト.getRequestUrl();

public classhiroInterceptorFilter extends FormAuthenticationFilter 
{ 
    //デフォルトの PC 側ログイン要求private String loginUrl;
     //インターセプトする必要がある要求パスの保存に使用されます
    static List<String> interceptorUrlList = new ArrayList<>();
     //静的コード ブロック、ロードをインターセプトする必要があります [この例では、モバイル端末のリクエスト パスが格納されます]
    static{
    
        interceptorUrlList.add("/manage/index"); 
        interceptorUrlList.add("/system"); 
         ..... . }
 
    //インターセプター構築メソッド  publichiroInterceptorFilter() { 
    } 
    publichiroInterceptorFilter(String loginUrl) { 
        this.loginUrl = loginUrl; 
    } 
    //パラメータの取得/設定メソッド
    @Override 
        return loginUrl;
    
   
   
  

 
    public String getLoginUrl() {
    } 

    @Override 
    public void setLoginUrl(String loginUrl) { 
        this.loginUrl = loginUrl; 
    } 


    //ログイン ページにジャンプするメソッドをオーバーライド
    @Override   protected void redirectToLogin(ServletRequest request, ServletResponse response) throws IOException {
    
        //リクエスト ヘッダーから Get HttpServletRequestの現在のリクエスト パス
        httpServletRequest = (HttpServletRequest) request; 
        String url = httpServletRequest.getServletPath(); 
        //インターセプトする必要があるかどうかを決定するために使用される識別。デフォルトではインターセプトする必要はありません。Boolean 
        flag = false; 
        // 現在のリクエストが
        (String mobileUrl : interceptorUrlList) のモバイル パスであるかどうかを判断します { 
                flag = true; 
            } 
        }
  
    
            if(url.contains(mobileUrl)){ 
        //インターセプトされたリクエストに従って、別のログインリクエストパスにジャンプします
        if(flag){ 
            //モバイルインターフェース、インターセプトしてモバイルログインにジャンプします
            WebUtils.issueRedirect(request,response, "/ddLogin"); 
        } else { 
            //PC 側、PC 側ログインにジャンプ
            WebUtils.issueRedirect(request,response,loginUrl); 
        } 
    } }

おすすめ

転載: blog.csdn.net/snowing1997/article/details/131696175