0

你好,我正在使用漂亮的 jsf2.0 我创建了一个过滤器,它检查每个请求是否用户已登录

@WebFilter(urlPatterns= {"*.xhtml"} , dispatcherTypes = {DispatcherType.REQUEST})
public class Authentication implements Filter {

@Override
public void init(FilterConfig config) throws ServletException {
System.out.println("[Authentication Filter] : init Method");
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws         IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
HttpSession session = request.getSession(false);
PrettyContext context = PrettyContext.getCurrentInstance(request);      
if (!(context.getCurrentMapping().getId().equals("login")) && (session == null ||     session.getAttribute("username") == null)) {
{
response.sendRedirect(request.getContextPath()+"/login");
}
else {
chain.doFilter(req, res); // Logged-in user found, so just continue request.
}
@Override
public void destroy() {}
}

当我启动 tomcat 服务器时,它加载 login.xhtml 页面 URL 显示在地址栏中 //localhost:8080/MyApp/login 在 login.xhtml 我已经形成了用户名和密码字段

当我使用提交表单时

<p:commandButton ajax="false" value="Login" action="pretty:loggedin" />

当我在操作类中获取值时,那里的值是空的,当我在过滤器中打印 system.out.println loggin 时,看起来两个 URL 正在请求 1./login 2./loggedin 那里的 y 值是空的。任何解决方案请提前感谢。

4

1 回答 1

1

你在做什么看起来不正确。您pretty:loggedin在登录命令按钮中用作操作属性。这不会执行任何操作方法,而是重定向到其他映射,而没有任何机会处理用户输入的值。

相反,您应该在您使用的操作属性中引用一个方法来处理登录尝试。如果成功,这个方法应该返回pretty:loggedin,这会将用户重定向到新页面。

我希望这个能有一点帮助。如果您有更多问题,您应该在 PrettyFaces 论坛上发帖。如果解决问题需要多个问题/响应周期,那将是一个更好的帮助您的地方。:)

http://ocpsoft.org/support/

于 2013-04-26T06:22:15.847 回答