天天看點

Shiro登入記錄請求位址的問題解決

  • Shiro在登入失敗的情況下記錄了上次請求的位址
  • 産生的原因:

通常我們使用shiro,登入之後就會跳到我們上一次通路的URL,如果我們是直接通路登入頁面的話,shiro就會根據我們配置的successUrl去重定向。

1、shiro會把請求資訊儲存到session中:

Shiro登入記錄請求位址的問題解決
  • 在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

Shiro登入記錄請求位址的問題解決
  • 解決的辦法
      • 重寫過濾器的建立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);
}
           

繼續閱讀