首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebFilter urlPattern不工作

WebFilter urlPattern不工作
EN

Stack Overflow用户
提问于 2013-04-24 21:00:30
回答 2查看 5.4K关注 0票数 3

我正尝试在JSF2中使用WebFilter,但是我的过滤器不工作。无法识别urlPattern。

我的Filter类:

代码语言:javascript
复制
@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作为链接,不知道它是否最合适。有人知道问题出在哪里吗?

EN

回答 2

Stack Overflow用户

发布于 2019-04-04 13:25:19

像这样添加"@Component“。

代码语言:javascript
复制
@Component
@WebFilter(urlPatterns = {"/rws/*"})  
public class AuthorizationFilter implements Filter { ...
票数 4
EN

Stack Overflow用户

发布于 2013-04-25 09:18:54

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

将JSP添加到过滤器映射并不起作用,因为FORWARD上的JSF不使用RequestDispatcher#forward(),这与“普通的”JSP/Servlet和许多其他MVC框架不同。

如果您想触发过滤器,只需通过重定向发送新的请求即可。

因此,不是

代码语言:javascript
复制
public String login() {
    // ...

    return "home";
}

只管去做

代码语言:javascript
复制
public String login() {
    // ...

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

如果你担心faces消息会因为重定向而丢失,那就使用flash作用域吧。

另请参阅:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16192708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档