Spring Security“转发:”指令无法转发到登录表单
用户创建帐户后,我要自动登录该用户。
我有由Springs过滤器处理的标准表单登录/postlogin
。如果我转到http://localhost/postlogin
它,尝试登录我(由于未包含post参数而失败),但进行了适当的尝试。
但是,如果我想以编程方式登录用户,然后尝试从控制器返回:“ forward:/ postlogin”,则会收到404。
我假设forward:指令没有通过过滤器,因此没有被处理UsernamePasswordAuthenticationFilter
。
如何以编程方式手动诱导登录?我想在用户创建一个新帐户后执行此操作(注册完成后应立即将其登录到该帐户)。
回答:
我误读了另一条指南,并意识到正确的处理方法如下:
1)在SecurityContextHolder上手动设置身份验证令牌
UsernamePasswordWithAttributesAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken( loadUserByUsername(username), password, authorities ); SecurityContextHolder.getContext().setAuthentication(authenticationToken);
2) 不要 在此时渲染页面,或使用forward:指令。您必须使用redirect:指令。
return "redirect:/accountcreated";
如果呈现页面,则页面将正常加载,但是会话对象将丢失,因为将创建新的j_session_id,但不会将其发送到浏览器中级请求,并且下一个请求将使用旧的j_session_id,从而失去了新会话对象和认证。
使用forward:指令将绕过身份验证过滤器,不好。
但是重定向:导致更新的会话信息进入浏览器。
以上是 Spring Security“转发:”指令无法转发到登录表单 的全部内容, 来源链接: utcz.com/qa/406525.html