WebFilter urlPattern无法正常工作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WebFilter urlPattern无法正常工作相关的知识,希望对你有一定的参考价值。

我正在尝试使用带有JSF 2的Web Filter,但我的过滤器不起作用。网址格式无法识别。

我的过滤器类:

@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 / *”)

我的过滤器永远不会执行!

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

当我点击链接url没有改变,即,我正在浏览文件夹页面rws但浏览器中的url保持不变(http://jsftest.com:8080/TestePrimeFaces/faces/loginOK.xhtml)。那是问题吗?

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

答案

在回发时执行非重定向JSF导航时,不会触发Servlet过滤器。 JSF导航默认情况下不会创建新的HTTP请求(这将触发过滤器),但它只是更改了HTTP响应的内容,同时仍然保持相同的HTTP请求(这也正是您没有看到更改的原因)浏览器的地址栏)。

有些人可能会建议将FORWARD调度程序添加到过滤器映射中,因为Facelets上的JSF不使用RequestDispatcher#forward(),而不像“普通”JSP / Servlet和许多其他MVC框架。

如果要触发过滤器,只需通过重定向发送新请求。

所以,而不是

public String login() {
    // ...

    return "home";
}

做就是了

public String login() {
    // ...

    return "home?faces-redirect=true";
}

如果您担心由于重定向导致消息丢失,请使用闪存范围。

See also:

另一答案

像这样添加“@Component”。

@Component
@WebFilter(urlPatterns = {"/rws/*"})  
public class AuthorizationFilter implements Filter { ...

以上是关于WebFilter urlPattern无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

@WebFilter(urlPatterns) 未正确映射 http 请求

@WebFilter注解

SpringBoot项目@WebFilter过滤器urlPatterns配置失效的解决方案,以及多个filter过滤器demo

@WebFilter两种使用方法和失效解决方案

@WebFilter两种使用方法和失效解决方案

@WebFilter注解