我误读了另一条指南,并意识到正确的处理方法如下:
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:指令将绕过身份验证过滤器,不好。
但是重定向:导致更新的会话信息进入浏览器。