【发布时间】:2013-04-18 01:06:59
【问题描述】:
我正在尝试将 WebFilter 与 JSF 2 一起使用,但我的过滤器无法正常工作。无法识别 urlPattern。
我的过滤器类:
@WebFilter(urlPatterns = {"/rws/*"})
public class AuthorizationFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
HttpServletRequest req = (HttpServletRequest) request;
HttpSession session = req.getSession(true);
Object o = session.getAttribute("user");
HttpServletResponse res = (HttpServletResponse) response;
if(o == null)
res.sendRedirect(req.getContextPath() + "/login.xhtml");
else
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void destroy() {
}
}
在我的结构中,我想保护 rws 文件夹中的所有页面,但我无法配置过滤器。
我试过了 @WebFilter("/rws/*") @WebFilter("/faces/rws/*")
我的过滤器永远不会被执行!!
我注意到浏览页面时 url 没有改变。 例如,用户打开 index.xhtml 执行登录,然后重定向到页面 loginOk.xhtml。 LoginOk.xhtml 页面包含指向文件夹 rws 中页面的链接。
当我单击链接时,url 没有改变,即我正在浏览文件夹页面 rws 但浏览器中的 url 保持不变(http://jsftest.com:8080/TestePrimeFaces/faces/loginOK.xhtml)。是这个问题吗?
使用commandLink作为链接,不知道是否最合适。 有谁知道问题出在哪里?
【问题讨论】:
-
好的,这是因为我将代码编辑得更小了。问题是类没有执行。
-
您不禁止使用 web.xml 进行注释扫描:
<web-app metadata-complete="true"?尝试映射/*并检查是否没有其他不以/开头的映射。 -
我不明白你的第一个问题。如果我映射 /* 所有请求都通过过滤器
-
(1) 作为
/*的作品,这一点没有实际意义。 (可以使用metadata-complete="true".) (2) If war is called xxx.war, try/xxx/rws/*`(上下文根)抑制@WebFilter扫描。
标签: java jsf-2 servlet-filters