[英]Infinite loop when using filter for jsp files
當我為所有jsp頁面創建過濾器時,瀏覽器進入無限循環,但是當我僅為一頁創建過濾器時,瀏覽器將正確運行!
這是doFilter方法,如果有人發現錯誤plx告訴我...
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if (debug) log("AuthenticationFilter:doFilter()");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
HttpServletResponse httpres = (HttpServletResponse) response;
HttpServletRequest httpreq = (HttpServletRequest) request;
if (httpreq.getRequestURI().indexOf("login.jsp") == -1 || httpreq.getRequestURI().indexOf("LoginServlet") == -1) {
// if(!httpreq.getRequestURL().equals("/OSQS/Login.jsp")){
HttpSession session = httpreq.getSession();
String logged = (String) session.getAttribute("login");
if (logged == null) {
httpres.sendRedirect("login.jsp");
return;
}
}
chain.doFilter(request, response);
}
造成此問題的原因是,過濾器的url-pattern
顯然過於通用,例如/*
或*.jsp
。 它將在每個 JSP請求上執行。
在過濾器中,當沒有登錄用戶時,您將重定向到login.jsp
。 重定向將指示客戶端觸發新的HTTP請求。 當請求URL與其url-pattern
匹配時,新的HTTP請求將再次調用過濾器。 因為仍然沒有登錄的用戶,所以它會進入無限重定向循環。
除了確定請求網址(如您所做的那樣)之外,您還可以將受保護的頁面放在更具體的url-pattern
,例如/secured/*
, /private/*
左右,然后將受保護的頁面放在此處,但是登錄頁面沒有。 如果您重定向到登錄頁面,則不會再調用該過濾器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.