2
我有一個項目,這個結構(我不能改變它):JSF過濾器跳過一些文件
Web Pages
META-INF
WEB-INF
assets (javascript, css and images)
includes (top.xhtml, bottom.xhtml, etc)
templates (master.xhtml)
views
fornecedor
-home.xhtml
-user.xhtml
-login.xhtml
franqueador
-home.xhtml
-user.xhtml
-login.xhtml
Ø有login.xhtml
每個文件夾是有原因的,我不能改變它,它由項目經理通過。
這是我SessionFilter:
@WebFilter("/views/*")
public class SessionFilter implements Filter {
@Override
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);
LoginController loginController = (LoginController) ((boolean) (session != null) ? session.getAttribute("loginController") : null);
if (!request.getRequestURI().endsWith("/fornecedor/index.xhtml")) {
if (loginController == null || !loginController.getIsLoggedIn()) {
response.sendRedirect(request.getContextPath()
+ "/views/index.xhtml");
} else {
chain.doFilter(req, res);
}
}
}
}
而且它不工作,沒有HTML代碼返回一個空白頁,當我改變.xhtml
到.html
,它給了我一個重定向循環。
我需要避開我所有的login.xhtml
頁面和index.xhtml
views
文件夾。我在我的過濾器上調試了if
,但它總是返回false
。
編輯
繼BalusC答案,我來到了這一點:
if (!request.getRequestURI().endsWith("/views/index.html")
&& !request.getRequestURI().endsWith("/views/fornecedor/login.html")
&& !request.getRequestURI().endsWith("/views/franqueado/login.html")
&& (loginController == null || !loginController.getIsLoggedIn())) {
response.sendRedirect(request.getContextPath() + "/views/index.html");
} else {
chain.doFilter(req, res);
}
這是工作,但還有另外一個問題,如果我有10個文件夾,我需要把它們添加在這if
聲明...我需要使其自動。
您好,感謝您的回答,但怎麼樣'@WebFilter(「/視圖/ *」)'?就這樣離開嗎? – Gerep
此批註將過濾器註冊到應用程序中,並讓它在匹配'/ views/*'的URL模式上運行。如果刪除它,過濾器將不會被註冊,因此根本不會運行。 – BalusC
但在我的情況下,我的'views'文件夾中有一些文件夾,正確的選擇是讓它這樣嗎? '@WebFilter(「/ views/*」)' – Gerep