我正尝试在JSF2中使用WebFilter,但是我的过滤器不工作。无法识别urlPattern。
我的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 / *")
我的过滤器永远不会执行!!
我注意到当我浏览页面时,url不会改变。例如,用户打开index.xhtml,执行登录,然后重定向到页面loginOk.xhtml。LoginOk.xhtml页具有指向文件夹rws中的页的链接。
当我点击链接时,url不会改变,即,我正在浏览文件夹页面rws,但浏览器中的url保持不变(http://jsftest.com:8080/TestePrimeFaces/faces/loginOK.xhtml)。这是问题所在吗?
使用了commandLink作为链接,不知道它是否最合适。有人知道问题出在哪里吗?
发布于 2019-04-04 13:25:19
像这样添加"@Component“。
@Component
@WebFilter(urlPatterns = {"/rws/*"})
public class AuthorizationFilter implements Filter { ...发布于 2013-04-25 09:18:54
当您在回发时执行非重定向JSF导航时,Servlet过滤器不会被触发。默认情况下,JSF导航不会创建新的HTTP请求(这将触发过滤器),但它只会更改HTTP响应的内容,同时仍然保留相同的HTTP请求(这也是为什么您在浏览器的地址栏中看不到更改的原因)。
将JSP添加到过滤器映射并不起作用,因为FORWARD上的JSF不使用RequestDispatcher#forward(),这与“普通的”JSP/Servlet和许多其他MVC框架不同。
如果您想触发过滤器,只需通过重定向发送新的请求即可。
因此,不是
public String login() {
// ...
return "home";
}只管去做
public String login() {
// ...
return "home?faces-redirect=true";
}如果你担心faces消息会因为重定向而丢失,那就使用flash作用域吧。
另请参阅:
https://stackoverflow.com/questions/16192708
复制相似问题