我已經實現了servletFilter並在我的web.xml中聲明瞭它,但問題是我現在無法登錄。用戶提交他們的用戶名和密碼,代碼重定向到j_security_check頁面,然後無休止地重新加載logon.html。在代碼中doFilter(req,res)同時被點擊,用於發送回logon.html的sendRedirect代碼從不使用。使用Servlet過濾器和j_security_check登錄時出現無盡循環
是否還有其他元素遺失?我讀過這個servlet過濾器和j_security_check不總是玩的很好,但我想我可以找到解決辦法。
代碼:
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
HttpSession session = request.getSession(false);
String loginURI = request.getContextPath() + "/logon.html";
String securityURI = request.getContextPath() + "/j_security_check";
boolean loggedIn = session != null && session.getAttribute("user") != null;
boolean securityRequest = request.getRequestURI().equals(securityURI);
boolean loginRequest = request.getRequestURI().equals(loginURI);
if (loggedIn || loginRequest || securityRequest) {
chain.doFilter(req, res);
} else {
response.sendRedirect(loginURI);
}
}
所以代碼檢查該請求從登錄頁或頁j_security_check未來並處理的doFilter如果它們。這是工作,但我不知道爲什麼它不處理通過應用程序,如果它通過兩次?
的web.xml:
<session-config>
<session-timeout>1</session-timeout>
</session-config>
<filter>
<filter-name>servletFilter</filter-name>
<filter-class>org.t.s.w.AuthServletFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>servletFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
這工作!爲什麼這個工作? –
您只是通過逆轉狀態來打破無限循環。 – lsiva