新用户提交“新帐户”表单后,我想手动登录该用户,这样他们就不必登录后续页面
通过spring安全拦截器的正常表单登录页面工作正常
在新帐户表单控制器中,我正在创建用户名PasswordAuthenticationToken,并在SecurityContext中手动设置它:
SecurityContextHolder.getContext().setAuthentication(身份验证);
在同一页上,我稍后检查用户是否使用以下方式登录:
SecurityContextHolder.getContext().getAuthentication().getAuthories();
这将返回我之前在身份验证中设置的权限。一切都很好
但是,当在我加载的下一个页面上调用相同的代码时,身份验证令牌就是UserAnonymous
我不清楚为什么它没有保留我在上一个请求中设置的身份验证。有什么想法吗
- 这可能与会话ID设置不正确有关吗
- 是否有可能以某种方式覆盖了我的身份验证
- 也许我需要另一个步骤来保存身份验证
- 或者,我是否需要在整个会话中声明身份验证,而不是以某种方式声明单个请求
只是想找一些想法来帮我看看这里发生了什么
我找不到任何其他完整的解决方案,所以我想我会发布我的。这可能有点像黑客,但它解决了上述问题:
公共无效登录(HttpServletRequest请求、字符串用户名、字符串密码)
{
UsernamePasswordAuthenticationTokenAuthRequest=新的UsernamePasswordAuthenticationToken(用户名、密码);
//对用户进行身份验证
Authentication=authenticationManager.authenticate(authRequest);
SecurityContext SecurityContext=SecurityContextHolder.getContext();
securityContext.setAuthentication(身份验证);
//创建新会话并添加安全上下文。
HttpSession session=request.getSession(true);
setAttribute(“SPRING\u SECURITY\u CONTEXT”,securityContext);
}