Spring security 在SpringSecurity3.1中,我使用基于表单的身份验证,并希望在UserDetails对象中添加其他属性

Spring security 在SpringSecurity3.1中,我使用基于表单的身份验证,并希望在UserDetails对象中添加其他属性,spring-security,spring-3,Spring Security,Spring 3,我是Springs的新手,不是java的高级程序员 我正在使用Springs security创建一个原型。 为了简单起见,我使用基于JSP表单的用户身份验证,并在applicationContext-security.xml中有一些虚拟用户 <security:http auto-config='true'> <security:intercept-url pattern="/**" access="ROLE_USER" /> </security:http&

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

我正在使用Springs security创建一个原型。 为了简单起见,我使用基于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对象中,以便它始终对我可用

到目前为止,我所研究的是,我需要创建我的自定义UserDetails服务

我的问题是,如果我使用的是springs标准身份验证方法,我是否需要创建自定义UserDetails服务? 我只想存储一些从数据库读取的附加细节

我列举了很多例子,但没有一个能回答这个问题。 而且因为我对这些技术并不陌生。我不知道如何将代码片段连接在一起。任何能帮我指出正确方向的人都会很好


谢谢

是的。通常,您需要一个自定义的
UserDetails服务
,该服务返回扩展的
UserDetails
对象以及所需的其他属性。如果您这样搜索,您会发现很多示例配置,例如


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

太棒了,这就是我想要的。对于像我这样的初学者来说,这是一个非常简单直接的例子。你能再告诉我一件事吗?一旦我将身份验证过程更改为OpenID,那么这个自定义实现就会消失。但是我仍然希望在userDetails中存储一些额外的属性。也就是说,我喜欢通过像Gmail这样的OpenID服务进行身份验证。如果身份验证成功,那么基于电子邮件,我将在数据库中执行本地搜索,并在userdetails obj中加载一些额外属性。可能吗?或者你有什么其他的建议来实现这一点吗?非常相似。查看Spring安全代码库中的OpenID示例代码。它使用一个自定义的
UserDetails
对象,该对象具有从OpenID提供程序提取的属性。添加一些本地JDBC代码应该很简单。