via*_*tor 6 authentication customization spring-security
在我的应用程序中,我正在使用LDAP身份验证.但我也有2个远程服务,需要通过方法登录(用户名,密码)进行身份验证.该方法返回安全令牌,这使我能够调用另一个方法,即我应该将安全令牌作为第一个参数传递给服务方法.
因此,我想在使用LDAP成功登录后立即获取这些安全令牌,并将它们存储在SecurityContext中.我试图用认证成功处理程序,裁判的形式登录元素.使用处理程序我替换身份验证SecurityContext中的对象,具有自定义AuthenticationToken,不仅包含密码,还包含安全令牌.但在这种情况下,我有一个例外,即没有身份验证提供程序支持此类令牌.我知道也可以在HTTP会话中存储令牌,但在这种情况下我必须将会话传递给服务对象,所以我想将令牌存储在SecurityContext中.
处理服务安全令牌的最佳方法是什么?
Gan*_*alf 11
我经常使用该Authentication.getDetails()对象来存储可能没有直接链接到用户的其他信息.因此,您可以在该字段中存储所需的任何对象(例如HashMap),并且它共享Authentication对象生命周期.
HashMap<String, Object> info = new HashMap<String, Object>();
info.put("extraInfo", "info");
auth.setDetails(info);
...
Map<String, Object> i = (Map<String, Object>)SecurityContextHolder.getContext().getAuthentication.getDetails();
Run Code Online (Sandbox Code Playgroud)
您对“UserDetails”的实现可能包含任何其他数据。这是存储在 SecurityContext 中的内容,稍后可以在成功登录后访问。
您可以稍后访问它(假设 MyUserDetails 实现了 UserDetails)
Object principal = SecurityContextHolder.getContext().getAuthentication();
if (principal instanceof MyUserDetails) {
MyUserDetails mud = (MyUserDetails) principal;
mud.getMyData(); //Extract your additional data here
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16266 次 |
| 最近记录: |