【问题标题】:Methods on Authentication object in Spring securitySpring security中Authentication对象的方法
【发布时间】:2013-05-03 07:06:18
【问题描述】:

我怎么知道getDetails()getPrincipal() 等在SecurityContextHolder.getContext().getAuthentication() 上返回了什么?类型是对象,我无法理解文档中写的内容。

【问题讨论】:

    标签: java spring jakarta-ee spring-security


    【解决方案1】:

    getDetails() 返回一个 WebAuthenticationDetails 对象,该对象包含用户的 IP 地址和 SessionId(尽管我怀疑这可能取决于应用程序的类型;由于 getPrincipal() 具有类似的依赖性,因此getDetails() 也可能会有所不同。以类似的方式)。

    getPrincipal() 返回一个对象,该对象取决于您管理身份验证的方式。例如,对于 LDAP 身份验证,getPrincipal() 方法返回一个 LdapUserDetailsImpl 对象。

    如果您需要访问用户/主体信息,我会设置一个自定义 UserDetails 类,并从那里存储/检索所需的信息,但您可以轻松使用 getPrincipal()getDetails()将它们作为符合条件的类,或者您扩展它们自然返回的类(并随心所欲地管理它们)。

    这有点有趣,我觉得有必要注意,getPrincipal() 方法实际上并没有返回一个 Principal 对象(LdapUserDetailsImpl 对象也不能被转换为一个 Principal 对象)。

    【讨论】:

      【解决方案2】:

      这个怎么样? (假设getPrincipal() 不返回null

      String className = SecurityContextHolder.getContext().getAuthentication().getPrincipal().getClass().getName();
      

      它应该返回带有包名的类名,即完全限定的类名。我认为该类型将是实现java.security.Principal 的东西(一些特定于弹簧的类)。因此,您可以执行以下操作:

      Principal p = (Principal) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
      

      【讨论】:

        猜你喜欢
        • 2017-11-21
        • 2021-10-05
        • 2012-03-07
        • 2012-07-15
        • 2013-05-24
        • 2014-07-04
        • 2014-07-31
        • 2015-12-04
        • 1970-01-01
        相关资源
        最近更新 更多