2

我的应用程序基于 Spring 3、Hibernate 3、MySQL。我阅读了 Spring Security 文档并了解到我可以实现如下所示的身份验证,

<authentication-manager>
   <authentication-provider>
    <jdbc-user-service data-source-ref="dataSource"

       users-by-username-query="
          select username,password, enabled 
          from users where username=?" 

       authorities-by-username-query="
          select u.username, ur.authority from users u, user_roles ur 
          where u.user_id = ur.user_id and u.username =?  " 

    />
   </authentication-provider>
</authentication-manager>

我理解上述部分,但我担心的是,在我的应用程序中,用户表不仅存储用户名、密码和启用字段。它还存储名字和姓氏、emailID、电话等。在成功验证后,我希望下一个 jsp 自动填充所有用户详细信息,而不是向用户询问与未注册用户相同的信息。

  1. 我想使用基于注解的配置而不是基于 xml 的配置(与 spring 2.5 示例中提到的不同)
  2. spring 文档不使用休眠来保证安全。我应该使用hibernate还是jdbc-user-service?如果休眠,那怎么办?
  3. 我看到几个例子使用定制的 UserService。我也需要这样做吗?

有人可以用好的例子提出建议吗?对其他帖子的任何引用也会有所帮助。

4

1 回答 1

1

至于现在 Spring Security 大部分配置是没有注解的,但是你可以使用特殊的 XML 命名空间来简单的定制 Spring Security。

您需要实现自己的UserDetailsService,它将负责从持久存储中加载用户的详细信息。

UserDetailsService接口只有一种方法

UserDetails loadUserByUsername(String username) throws UsernameNotFoundException;

在实现和创建组件的 bean 之后,您需要注入它:

<authentication-manager>
   <authentication-provider user-service-ref="myUserDetailsService"/>
</authentication-manager>

Spring Security Docs 中的更多内容:

http://static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity-single.html#tech-userdetailsservice

http://static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity-single.html#nsa-authentication-provider

如果您的数据库中没有类似的信息enabled,您将始终必须为该字段true的对象添加值。UserDetails

于 2012-11-06T16:21:41.733 回答