springboot shiro登錄成功無法正常跳轉(zhuǎn)

剛開始使用shiro,發(fā)現(xiàn)明明配置的successURL是”/admin/index”,但是最后卻跳轉(zhuǎn)到各種奇怪的鏈接,xx.js,xxx.min.css這類。

我的shiro配置如下:

配置相關(guān)截圖.png

然后追蹤代碼,發(fā)現(xiàn)登錄成功后執(zhí)行FormAuthenticationFilter的onLoginSuccess方法:

protected boolean onLoginSuccess(AuthenticationToken token, Subject subject,
                                     ServletRequest request, ServletResponse response) throws Exception {
        issueSuccessRedirect(request, response);
        //we handled the success redirect directly, prevent the chain from continuing:
        return false;
    }

其中調(diào)用的這個方法:


protected void issueSuccessRedirect(ServletRequest request, ServletResponse response) throws Exception {
        WebUtils.redirectToSavedRequest(request, response, getSuccessUrl());
    }


public static void redirectToSavedRequest(ServletRequest request, ServletResponse response, String fallbackUrl)
            throws IOException {
        String successUrl = null;
        boolean contextRelative = true;
        SavedRequest savedRequest = WebUtils.getAndClearSavedRequest(request);
        if (savedRequest != null && savedRequest.getMethod().equalsIgnoreCase(AccessControlFilter.GET_METHOD)) {
            successUrl = savedRequest.getRequestUrl();
            contextRelative = false;
        }

        if (successUrl == null) {
            successUrl = fallbackUrl;
        }

        if (successUrl == null) {
            throw new IllegalStateException("Success URL not available via saved request or via the " +
                    "successUrlFallback method parameter. One of these must be non-null for " +
                    "issueSuccessRedirect() to work.");
        }

        WebUtils.issueRedirect(request, response, successUrl, null, contextRelative);
    }

successUrl = savedRequest.getRequestUrl();這里會跳轉(zhuǎn)到初次系統(tǒng)訪問的地址。比如用戶初次訪問的是a1/first.html,登錄之后將會跳轉(zhuǎn)到該地址。如果沒有初次訪問的地址,就會訪問”/”。


我解決方法是重寫FormAuthenticationFilter的onLoginSuccess方法:

我用的是springboot,以配置類的形式配置的。

首先重寫:


publicclassMyFormAuthenticationFilter extendsFormAuthenticationFilter{

    @Override

    protectedbooleanonLoginSuccess(AuthenticationToken token, Subject subject,

                                  ServletRequest request, ServletResponse response) throwsException {

        String successUrl = "/admin/access/index.html";//我是直接寫死了跳轉(zhuǎn)鏈接

        WebUtils.issueRedirect(request,response,successUrl);

        returnfalse;//返回false表示執(zhí)行鏈結(jié)束

    }

}

然后在shiroFilter配置類中加入該filter:

//解決shiro 登錄成功后無法正確跳轉(zhuǎn)successUrl的問題,重寫Filter

  Map map = newLinkedHashMap();

  map.put("authc",newMyFormAuthenticationFilter());

  shiroFilterFactoryBean.setFilters(map);

TIM圖片20180307144056.png

如果是spring 項目,直接在xml文件做響應(yīng)配置即可。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容