Interceptador de login (solicitações de interceptação, solicitações diferentes entram em páginas de login diferentes)

Interceptador de login: ShiroInterceptorFilter . Herdado de FormAuthenticationFilter

Obtenha o caminho da solicitação antes de ser interceptado:

WebUtils.getSavedRequest(solicitação);

String url = salvoRequest.getRequestUrl();

classe pública ShiroInterceptorFilter estende FormAuthenticationFilter
{
    //Solicitação de login padrão do PC
    private String loginUrl;
     //Usado para armazenar o caminho da solicitação que precisa ser interceptado
     static List<String> interceptorUrlList = new ArrayList<>();
     //Bloco de código estático, carrega o caminho da solicitação que precisa ser interceptado [Neste exemplo , a solicitação do terminal móvel é armazenada path]
    static{
   
   
        interceptorUrlList.add("/gerenciar/index");
        interceptorUrlList.add("/sistema");
         ......
   }

    //Método de construção do interceptor
    public ShiroInterceptorFilter() {
    }

    public ShiroInterceptorFilter(String loginUrl) {
        this.loginUrl = loginUrl;
    }

    //obter/definir método de parâmetros
    @Sobrepor
    string pública getLoginUrl() {
        retornar loginUrl;
    }

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


    //Método reescrito para ir para a página de login
    @Sobrepor
    protegido void redireccionamentoToLogin(solicitação ServletRequest, resposta ServletResponse) lança IOException {
   
   
        //Obtém o caminho da solicitação atual no cabeçalho da solicitação
        HttpServletRequest httpServletRequest = (HttpServletRequest) solicitação;
        String url = httpServletRequest.getServletPath();
        //Identificador usado para julgar se precisa ser interceptado, não precisa ser interceptado por padrão
        Sinalizador booleano = falso;
        //Julga se a solicitação atual é o caminho do terminal móvel
        for (String mobileUrl: interceptorUrlList) {
            if(url.contains(mobileUrl)){
                bandeira = verdadeiro;
            }
        }
        //De acordo com a solicitação interceptada, salte para diferentes caminhos de solicitação de login
        se(sinalizador){
            //Interface do terminal móvel, interceptação salta para login do terminal móvel
            WebUtils.issueRedirect(solicitação, resposta, "/ddLogin");
        }outro{
            //Lado do PC, vá para o login do lado do PC
            WebUtils.issueRedirect(solicitação, resposta, loginUrl);
        }
    }
}

Acho que você gosta

Origin blog.csdn.net/snowing1997/article/details/131696175
Recomendado
Clasificación