WebFilter urlPattern 不起作用

use*_*652 4 java jsf-2 servlet-filters

我尝试将 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() {  
    }  
}  
Run Code Online (Sandbox Code Playgroud)

在我的结构中,我想保护 rws 文件夹中的所有页面,但我无法配置过滤器。

我试过@WebFilter("/rws/*") @WebFilter("/faces/rws/*")

我的过滤器从未被执行!

我注意到当我浏览页面时,url 没有改变。例如,用户打开index.xhtml执行登录,然后重定向到页面loginOk.xhtml。LoginOk.xhtml 页面包含指向文件夹 rws 中页面的链接。

当我单击链接时,网址不会更改,即我正在浏览文件夹页面 rws,但浏览器中的网址保持不变(http://jsftest.com:8080/TestePrimeFaces/faces/loginOK.xhtml)。这是问题所在吗?

使用了commandLink作为链接,不知道是否最合适。有谁知道问题出在哪里?

小智 6

像这样添加“@Component”。

@Component
@WebFilter(urlPatterns = {"/rws/*"})  
public class AuthorizationFilter implements Filter { ...
Run Code Online (Sandbox Code Playgroud)