【发布时间】:2012-05-22 19:23:31
【问题描述】:
我正在尝试使用Filter 来强制我的用户在他们想要访问某些页面时登录。
所以我的Filter 必须将它们重定向到没有会话的错误页面。
但我不希望在他们访问index.html 时发生这种情况,因为他们可以在索引页面中登录。
所以我需要一个匹配除/ 和index.xhtml 之外的所有页面的URL 模式。
我该怎么做?我可以在web.xml 中使用正则表达式吗?
编辑:
看完this
我认为我可以制作类似的东西:
if (!req.getRequestURI().matches("((!?index)(.*)\\.xhtml)|((.*)\\.(png|gif|jpg|css|js(\\.xhtml)?))"))
在我的 doFilter() 方法中,但它仍然处理所有内容。
我确信正则表达式可以工作,因为我已经在线测试过它并且它匹配不需要过滤的文件,但是即使对于排除的文件也会执行 if 的内容!
编辑 2:
我正在尝试一种新方法。
我已经在web.xml 中将过滤器映射到*.xhtml,所以我不需要使用上面的正则表达式排除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 中)。
如何排除我的索引页面被过滤?
【问题讨论】:
标签: regex servlets servlet-filters regex-negation