如何在 JSF 2 中进行 Web 过滤?
Posted
技术标签:
【中文标题】如何在 JSF 2 中进行 Web 过滤?【英文标题】:How do a web filter in JSF 2? 【发布时间】:2011-12-20 06:13:07 【问题描述】:我创建了这个过滤器:
public class LoginFilter implements Filter
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
HttpServletRequest req = (HttpServletRequest) request;
HttpSession session = req.getSession();
if (session.getAttribute("authenticated") != null || req.getRequestURI().endsWith("login.xhtml"))
chain.doFilter(request, response);
else
HttpServletResponse res = (HttpServletResponse) response;
res.sendRedirect("login.xhtml");
return;
@Override
public void init(FilterConfig filterConfig) throws ServletException
@Override
public void destroy()
这是我的结构:
然后我在 web.xml 中添加过滤器:
<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
过滤器正常工作,但一直给我这个错误:
"Was not possible find or provider the resource, login"
在那之后我的richfaces 不再起作用了。
我该如何解决?或者正确地创建一个网络过滤器?
【问题讨论】:
这是一个奇怪的错误信息。你是从其他语言翻译过来的吗?只是 HTTP 404 错误吗? 我做 BalusC,我来自巴西,所以葡萄牙语出现错误,您知道如何将 Eclipse 更改为英语吗?所以我可以发布原始错误。 Eclipse 的默认语言取决于平台默认语言环境。因此,如果您的操作系统设置为葡萄牙语,那么 Eclipse 将继承此设置。但是您可以通过在eclipse.exe
上指定-nl [languagecode]
参数来覆盖它。例如:eclipse.exe -nl en
会将其设置为英文。
【参考方案1】:
您传递给 sendRedirect()
的任何相对路径 URL(即不以 /
开头的 URL)都将与当前请求 URI 相关。我了解登录页面位于http://localhost:8080/contextname/login.xhtml。所以,如果你例如访问http://localhost:8080/contextname/pages/user/some.xhtml,那么这个重定向调用实际上将指向http://localhost:8080/contextname/pages/user/login.xhtml,我认为它不存在。再次查看浏览器地址栏中的 URL。
要解决此问题,请改为重定向到与域相关的 URL,即以 /
开头的 URL。
res.sendRedirect(req.getContextPath() + "/login.xhtml");
【讨论】:
以上是关于如何在 JSF 2 中进行 Web 过滤?的主要内容,如果未能解决你的问题,请参考以下文章