新用户提交“新帐户”表单后,我想手动将该用户登录,以便他们不必在后续页面上登录。如何在Spring Security/SpringMVC中手动设置经过身份验证的用户
通过spring安全拦截器的正常形式的登录页面工作得很好。
在新的账户形式的控制器我创建一个UsernamePasswordAuthenticationToken和SecurityContext的人工设置:
SecurityContextHolder.getContext().setAuthentication(authentication);
在同一页面后,我检查用户登录时:
SecurityContextHolder.getContext().getAuthentication().getAuthorities();
这将返回我之前在身份验证中设置的权限。一切都很好。
但是,当我加载的下一页上调用相同的代码时,身份验证令牌只是UserAnonymous。
我不清楚为什么它没有保留我在前一个请求中设置的身份验证。有什么想法吗?
- 它可能与会话ID的设置不正确吗?
- 有什么可能覆盖我的身份验证吗?
- 也许我只是需要另一个步骤来保存身份验证?
- 还是有什么我需要做的宣布整个会话的身份验证,而不是一个单一的请求?
只是寻找一些想法,可能会帮助我看看这里发生了什么。
您可以按照我的答案http://stackoverflow.com/questions/4824395/spring-security-forward-directive-cant-forward-to-login-form/7972971#7972971 – AlexK 2011-11-01 21:17:13
读者,要小心的答案这个问题如果他们告诉你要做:`SecurityContextHolder.getContext()。setAuthentication(认证)`。它的工作原理很普遍,但是如果你这么做,会遇到严重的功能缺陷。有关更多信息,请参阅我的问题和答案:https://stackoverflow.com/questions/47233187/spring-security-manual-login-best-practice – goat 2017-11-28 02:47:36