我怎么能确定今天和未来版本的 Spring 会返回什么?我没有找到有关此的文档。我怎样才能确定 Spring 决定分配给该字段的内容?
SecurityContextHolder.getContext().getAuthentication().getDetails()
据此,您可以期待西班牙宗教裁判所
我怎么能确定今天和未来版本的 Spring 会返回什么?我没有找到有关此的文档。我怎样才能确定 Spring 决定分配给该字段的内容?
SecurityContextHolder.getContext().getAuthentication().getDetails()
据此,您可以期待西班牙宗教裁判所
除非null
你把东西放在那里。
它仅取决于所选的实现和您的操作。您提供此信息,而不是 Spring。Spring 刚刚创建了一个字段来保存与身份验证实例相关的附加数据,并允许您设置您想要的所有内容。
编辑:
有一个Authentication
- 的子类,AbstractAuthenticationToken
它定义了getDetails()
并且它的已知实现类都没有覆盖这个方法。这意味着这setDetails
是从外部更改这些细节的一种方法。因此,所有的工作都被转移到一个机制上,这个机制AuthenticationManager
通常由你控制。
Java Spring 并不清楚应该从 SecurityContext 的 getDetails 中得到什么
我们不能这么说,因为我认为 Spring 开发人员已经将这种选择交给了安全提供程序实现。
如果您有自定义实现,您的安全提供者必须使用 AbstractAuthenticationToken 之一。作为 AbstractAuthenticationToken 的一部分,您可以设置详细信息。AbstractAuthenticationToken.setDetails(details);
例如,我使用 CAS(中央身份验证服务)。CAS 使用 UsernamePasswordAuthenticationToken 并使用 DefaultServiceAuthenticationDetails 设置详细信息
其中包括以下详细信息:
详细信息:org.springframework.security.cas.web.authentication.DefaultServiceAuthenticationDetails@950d14e5:RemoteIpAddress:xxx.xx.xx.xxx;SessionId:A0A0A0A0BB1B1B1B1ServiceUrl:https ://local.example.com/test_application/j_spring_cas_security_check
这就是我们使用细节对象 的方式
public class CustomAuthentication implements Authentication {
private Object details
;
@Override
public Object getDetails(){
return details;
}
/** Sets the details */
public void setDetails(Object details){
this.details = details;`enter code here`
}}
可以看到,Spring 只支持 getDetails() 函数,我们可以为这个对象设置任何东西,getDetails() 将准确返回该数据。