【问题标题】:In Spring Security 3.1 i am using form based authentication and want to put additional attributes in UserDetails object在 Spring Security 3.1 中,我使用基于表单的身份验证,并希望在 UserDetails 对象中添加其他属性
【发布时间】:2012-02-21 21:27:23
【问题描述】:

我是 Springs 新手,不是 java 高级程序员。

我正在创建一个使用 Springs 安全性的原型。 为了简单起见,我使用基于 JSP 表单的用户身份验证,并在我的 applicationContext-security.xml 中有一些虚拟用户

<security:http auto-config='true'>
  <security:intercept-url pattern="/**" access="ROLE_USER" />
</security:http>

<security:authentication-manager>
  <security:authentication-provider>
    <security:user-service>
      <security:user name="foo" password="foo" authorities="ROLE_USER, ROLE_ADMIN" />
      <security:user name="bob" password="bob" authorities="ROLE_USER" />
    </security:user-service>
  </security:authentication-provider>
</security:authentication-manager>

想法是以后这种认证方式会被OpenId认证替代。

现在我需要的是,一旦用户通过身份验证,使用经过身份验证的用户名,我想从数据库表中检索用户的其他详细信息并将其放入 Springs UserDetails 对象中,以便我始终可以使用它

p>

到目前为止我研究的是我需要创建我的自定义 UserDetailsS​​ervice

我的问题是,如果我使用 springs 标准身份验证方法,我需要创建自定义 UserDetailsS​​ervice 吗? 我只是想存储一些从数据库中读取的额外细节。

我经历了很多例子,但没有一个能回答这个特定的问题。 也因为我对这些技术并不陌生。我迷路了,不知道如何将代码 sn-ps 绑定在一起。任何能帮助我找到正确方向的帮助都会很棒

谢谢

【问题讨论】:

    标签: spring-security spring-3


    【解决方案1】:

    是的。通常,您需要一个自定义 UserDetailsService,它返回您的扩展 UserDetails 对象以及您想要的其他属性。如果您搜索 SO,您会发现很多示例配置,例如 this one

    严格来说,您不必使用UserDetailsService 或实现UserDetails(您可以直接实现AuthenticationProvider),但这是最简单的方法,也可能是您应该开始的地方。

    【讨论】:

    • 太棒了,这就是我想要的。对于像我这样的初学者来说非常简单直接的例子。一旦我将身份验证过程更改为 OpenID,您能否再告诉我一件事,然后这个自定义实现将消失。但我仍然想在 userDetails 中存储一些额外的属性。那就是我喜欢从 OpenID 服务(例如 Gmail)获得身份验证。如果身份验证成功,那么根据电子邮件,我将在我的数据库中进行本地搜索,并在 userdetails obj 中加载一些额外的属性。那可能吗 ?或者您有任何其他建议来实现这一目标
    • 非常相似。查看 Spring Security 代码库中的 OpenID 示例代码。它使用一个自定义的UserDetails 对象,该对象具有从 OpenID 提供程序中提取的属性。添加一些本地 JDBC 代码应该很简单。
    猜你喜欢
    • 2012-09-09
    • 2012-03-11
    • 2013-01-01
    • 2015-02-06
    • 2015-12-25
    • 2010-11-20
    • 2012-02-21
    • 2017-07-08
    • 2015-03-27
    相关资源
    最近更新 更多