【发布时间】:2011-06-07 14:02:42
【问题描述】:
在新用户提交“新帐户”表单后,我想手动登录该用户,这样他们就不必在后续页面上登录。
通过 spring 安全拦截器的普通表单登录页面工作正常。
在 new-account-form 控制器中,我正在创建一个 UsernamePasswordAuthenticationToken 并在 SecurityContext 中手动设置它:
SecurityContextHolder.getContext().setAuthentication(authentication);
在同一页面上,我稍后检查用户是否登录:
SecurityContextHolder.getContext().getAuthentication().getAuthorities();
这将返回我之前在身份验证中设置的权限。一切都很好。
但是当在我加载的下一页上调用相同的代码时,身份验证令牌只是 UserAnonymous。
我不清楚为什么它没有保留我在上一个请求中设置的身份验证。有什么想法吗?
- 这可能与会话 ID 设置不正确有关吗?
- 是否有什么东西可能会以某种方式覆盖我的身份验证?
- 也许我只需要另一个步骤来保存身份验证?
- 或者我需要做些什么来声明整个会话而不是单个请求的身份验证?
只是寻找一些可能有助于我了解这里发生了什么的想法。
【问题讨论】:
-
你可以关注我对stackoverflow.com/questions/4824395/…的回复
-
读者,如果他们告诉你这样做,请注意这个问题的答案:
SecurityContextHolder.getContext().setAuthentication(authentication)。它有效,并且很常见,但是如果您这样做,您会遇到严重的功能缺陷。有关更多信息,请参阅我的问题和答案:stackoverflow.com/questions/47233187/… -
这里有一个相关问题:stackoverflow.com/questions/69681254/…
标签: java authentication spring-mvc spring-security