如何在Spring Security/SpringMVC中手动设置经过身份验证的用户

新用户提交“新帐户”表单后,我想手动登录该用户,这样他们就不必登录后续页面

通过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);
}

发表评论