java spring安全预认证用户登录
我需要手动将用户登录到由spring security保护的应用程序中。 我的设想是
- 用户登录应用程序1李>
- 将提供指向我的spring应用程序的链接李>
- 当用户点击链接时,应用程序1将把加密的数据发布到我的spring应用程序中一个不安全的url李>
- 现在,我的控制器将接收加密数据并调用web服务 在应用程序1中,加密数据将在web服务中传递,我会得到一个带有用户名的响应李>
- 一旦我得到用户名。我不想重新验证。我只想设置用户主体/身份验证对象并加载仪表板李>
第一步到第四步是有效的
在我的不安全控制器中(我从中获取加密数据) 我有以下几行代码,但这将再次调用我的身份验证管理器,在这种情况下,我不想再次进行身份验证。我只想创建会话并设置用户主体
String username = application1.webservice(encoded data);
Authentication authentication = new UsernamePasswordAuthenticationToken(username,password);
SecurityContextHolder.getContext().setAuthentication(authentication);
return "redirect:/app";
注意:我确实有基于表单的LDAP身份验证(如果用户直接登录到我的应用程序,将使用此功能) 我使用的是spring security 3.2/Java配置
# 1 楼答案
SecurityContextPersistenceFilter
负责在web请求开始时在SecurityContextHolder
中设置SecurityContext
。在请求处理过程中对SecurityContext
的任何更改都将在web请求结束时复制到HttpSession
因此,当您在
SecurityContext
中更新Authentication
时,此筛选器将在身份验证请求结束时更新HttpSession
您能否确认在身份验证响应中发送回的
JSESSIONID
与在所有后续请求中传递的JSESSIONID
相同