0
我有以下過濾器代碼:在NetBeans瞭解Servlet過濾器重定向行爲
@WebFilter(urlPatterns = "/faces/*")
public class AuthenticationFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
HttpSession session = req.getSession(true);
System.out.println("No Filtering");
chain.doFilter(request, response);
}
啓動項目將導致印刷「不過濾」的兩倍,作爲一個時間攔截請求,第二將是攔截響應。
到目前爲止很好,但直到現在沒有過濾。使用POST方法更新網頁或提交表單的結果也是一樣的。 現在添加以下過濾條件:
if (!req.getRequestURI().toLowerCase().endsWith("/index.xhtml")
&&(session.isNew() || session.getAttribute("username") == null)) {
System.out.println("directed");
res.sendRedirect(req.getContextPath() + "/index.xhtml");
}else{
System.out.println("not directed");
chain.doFilter(request, response);}
將打印「定向」一旦結果符合市場預期。現在,在更新網頁或提交表單時出現問題,即使「無過濾」也不會打印出來?它看起來像過濾器不適用於HTTP請求,我不明白爲什麼?
這是我的web.xml文件:
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>faces/index.xhtml</welcome-file>
</welcome-file-list>
UPDATE1:
我試圖設置HTTP響應狀態到302303307,但沒有任何變化。
重複的嘗試http://stackoverflow.com/questions/28800688/does-my-filter-run-in-an-infinite-redirect-循環 – BalusC 2015-03-02 12:06:39
沒有什麼有用的提到的鏈接http://stackoverflow.com/questions/28800688/does-my-filter-run-in-an-infinite-redirect-loop – AWT 2015-03-02 12:40:24
此外問題不是很好的結構,我很害怕我誤解了...... – AWT 2015-03-02 12:48:14