你好我正在使用prettyfaces 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" />
当我在action类中获取值时,那里的值为null 当我在过滤器中打印system.out.println loggin时,它看起来像两个URL正在请求 1. /登录 2. / loggedin 那些y值在那里变为空。 任何解决方案请提前致谢。
答案 0 :(得分:1)
你正在做的事情看起来不正确。您在登录命令按钮中使用pretty:loggedin
作为操作属性。这不会执行任何操作方法,而是重定向到其他映射,而没有任何机会处理用户输入的值。
您应该在action属性中引用一个方法,用于处理登录尝试。如果成功,则此方法应返回pretty:loggedin
,这会将用户重定向到新页面。
我希望这会有所帮助。如果你有更多问题,你应该在PrettyFaces论坛上发帖。如果解决问题需要多个问题/响应周期,那么这是一个更好的帮助你的地方。 :)