Java Spring并不清楚应该从SecurityContext的getDetails中得到什么

时间:2017-05-28 16:24:13

标签: java spring authentication spring-security security-context

我如何确定今天和未来版本的Spring会返回以下行? 我没有找到关于此的文档。 我怎么能确定Spring决定分配给这个领域的是什么?

SecurityContextHolder.getContext().getAuthentication().getDetails()

根据this,你可以期待西班牙宗教裁判所

3 个答案:

答案 0 :(得分:4)

除非你把东西放在那里,否则期待Authentication

它仅取决于所选择的实施和您的行动。您提供此信息,而不是Spring。 Spring只创建了一个字段来保存与身份验证实例相关的其他数据,并允许您设置所需的所有内容。

编辑:
AbstractAuthenticationToken有一个子类 - getDetails()定义了setDetails,其enter image description here都没有覆盖此方法。这意味着AuthenticationManager是在外部更改这些细节的一种方法。因此,所有工作都转移到一个机制,该机制填写通常由您控制的身份验证(例如{{1}})。

答案 1 :(得分:2)

  

Java Spring并不清楚应该从getDetails中得到什么   SecurityContext

我们不能这样说,因为我认为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

答案 2 :(得分:0)

这就是我们使用详细信息对象的方式


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()将完全返回该数据。