Filter
如果他们想访问某些页面,我正在尝试使用 a强制我的用户登录。
所以我Filter
必须将它们重定向到没有会话的错误页面。
但我不希望他们访问时发生这种情况index.html
,因为他们可以登录索引页面。
所以我需要一个匹配除/
和之外的所有页面的 URL 模式index.xhtml
。
我怎样才能做到这一点?我可以在我的 regex 中使用正则表达式web.xml
吗?
编辑:
看完这篇
我以为我可以做类似的东西:
if (!req.getRequestURI().matches("((!?index)(.*)\\.xhtml)|((.*)\\.(png|gif|jpg|css|js(\\.xhtml)?))"))
在我的doFilter()
方法中,但它仍然处理所有内容。
我确信正则表达式可以工作,因为我已经在线测试过它并且它匹配不需要过滤的文件,但是即使对于排除的文件也会执行 if 的内容!
编辑 2:
我正在尝试一种新方法。
我已将过滤器映射到*.xhtml
我的web.xml
.,所以我不需要使用上面的正则表达式排除 css、图像和 javascript。
这是新代码(进入doFilter()
)
if (req.getRequestURI().contains("index")) {
chain.doFilter(request, response);
} else {
if (!userManager.isLogged()) {
request.getRequestDispatcher("error.xhtml").forward(request, response);
} else {
chain.doFilter(request, response);
}
}
但它仍然没有,因为它chain.doFilter()
在每一页上调用(在外部 if)。
如何排除我的索引页面被过滤?