- Shiro在登入失敗的情況下記錄了上次請求的位址
- 産生的原因:
通常我們使用shiro,登入之後就會跳到我們上一次通路的URL,如果我們是直接通路登入頁面的話,shiro就會根據我們配置的successUrl去重定向。
1、shiro會把請求資訊儲存到session中:
- 在WebUtils工具類中儲存了目前請求位址的路徑
public static void saveRequest(ServletRequest request) {
Subject subject = SecurityUtils.getSubject();
Session session = subject.getSession();
HttpServletRequest httpRequest = toHttp(request);
SavedRequest savedRequest = new SavedRequest(httpRequest);
session.setAttribute("shiroSavedRequest", savedRequest);
}
2.登入成功後會重定向到該URL
- 解決的辦法
-
- 重寫過濾器的建立MyFormAuthenticationFilter,重寫FormAuthenticationFilter過濾器中onLoginSuccess的方法
- 讓其在登入成功之前将session内緩存的url删除即可
-
@Override
protected boolean onLoginSuccess(AuthenticationToken token, Subject subject, ServletRequest request, ServletResponse response) throws Exception {
WebUtils.getAndClearSavedRequest(request);
return super.onLoginSuccess(token, subject, request, response);
}