gpt4 book ai didi

jsf - 如何在 JSF 2 中进行网络过滤?

转载 作者:行者123 更新时间:2023-12-04 14:17:49 25 4
gpt4 key购买 nike

我创建了这个过滤器:

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() {
}
}

这是我的结构:

enter image description here

然后我在 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 不再有效。

我该如何解决?或者正确创建网络过滤器?

最佳答案

您传递给 / 的任何路径相对 URL(即不以 sendRedirect() 开头的 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 - 如何在 JSF 2 中进行网络过滤?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7979839/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com