gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 11:26:51 25 4
gpt4 key购买 nike

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

通过spring安全拦截器的普通表单登录页面工作正常。

在 new-account-form Controller 中,我正在创建一个 UsernamePasswordAuthenticationToken 并在 SecurityContext 中手动设置它:

SecurityContextHolder.getContext().setAuthentication(authentication);

在同一页面上,我稍后检查用户是否登录:

SecurityContextHolder.getContext().getAuthentication().getAuthorities();

这将返回我之前在身份验证中设置的权限。一切都很好。

但是当在我加载的下一页上调用相同的代码时,身份验证 token 只是 UserAnonymous。

我不清楚为什么它没有保留我在上一个请求中设置的身份验证。有什么想法吗?

  • 是否与 session ID 设置不正确有关?
  • 有什么东西可能会以某种方式覆盖我的身份验证吗?
  • 也许我只需要另一个步骤来保存身份验证?
  • 或者我需要做些什么来声明整个 session 而不是单个请求的身份验证?

只是寻找一些可能有助于我了解这里发生了什么的想法。

最佳答案

我找不到任何其他完整的解决方案,所以我想我会发布我的。这可能有点小技巧,但它解决了上述问题:

public void login(HttpServletRequest request, String userName, String password)
{

UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(userName, password);

// Authenticate the user
Authentication authentication = authenticationManager.authenticate(authRequest);
SecurityContext securityContext = SecurityContextHolder.getContext();
securityContext.setAuthentication(authentication);

// Create a new session and add the security context.
HttpSession session = request.getSession(true);
session.setAttribute("SPRING_SECURITY_CONTEXT", securityContext);
}

关于java - 如何在 Spring Security/SpringMVC 中手动设置经过身份验证的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4664893/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com