servletFilterを実装してweb.xmlに宣言しましたが、今問題はできません。ユーザーはユーザー名とパスワードを送信し、コードはj_security_checkページにリダイレクトされ、logon.htmlを無限に再読み込みします。コードdoFilter(req、res)は両方の時間にヒットし、logon.htmlに送り返されたsendRedirectコードは決して使用されません。サーブレットフィルタとj_security_checkでログインするときの無限ループ
もう1つの要素がありますか?私はそのサーブレットのフィルタを読んで、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