新用户提交“新帐户”表单后,我想手动登录该用户,这样他们就不必在后续页面上登录。
通过spring安全拦截器的普通表单登录页面工作正常。
在新帐户形式的控制器中,我正在创建一个UsernamePasswordAuthenticationToken并在SecurityContext中手动进行设置:
SecurityContextHolder.getContext().setAuthentication(authentication);
稍后,我在同一页面上检查用户的登录身份:
SecurityContextHolder.getContext().getAuthentication().getAuthorities();
这将返回我之前在身份验证中设置的权限。一切都很好。
但是,在我加载的下一页上调用相同的代码时,身份验证令牌只是UserAnonymous。
我不清楚为什么它没有保留我在上一个请求中设置的身份验证。有什么想法吗?
- 可能与会话ID设置不正确有关吗?
- 是否有某种方式可能会覆盖我的身份验证?
- 也许我还需要保存身份验证的另一步骤?
- 还是我需要做一些事情来在整个会话中声明身份验证,而不是某种程度上的单个请求?
只是寻找一些想法可以帮助我了解这里发生的事情。
SecurityContextHolder.getContext().setAuthentication(authentication)
。它可以正常工作,并且很常见,但是如果您这样做,则会遇到严重的功能缺陷。有关更多信息,请参阅我的问题和答案:stackoverflow.com/questions/47233187/…–