使用 Spring 3 和 Hibernate 3 进行身份验证(基于注释)

Posted

技术标签:

【中文标题】使用 Spring 3 和 Hibernate 3 进行身份验证(基于注释)【英文标题】:Authentication using Spring 3 and Hibernate 3 (annotation based) 【发布时间】:2012-10-26 14:57:34 【问题描述】:

我的应用程序基于 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 自动填充所有用户详细信息,而不是向用户询问与未注册用户相同的信息。

    我想使用基于注解的配置,而不是基于 xml 的配置(不像 spring 2.5 示例中提到) spring 文档不使用休眠来保证安全。我应该使用 休眠或 jdbc 用户服务?如果休眠,那怎么办? 我看到几个使用自定义 UserService 的示例。是我需要的吗 也这样做?

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

【问题讨论】:

【参考方案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 安全文档中的更多内容:

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 对象中。

【讨论】:

感谢 Mac。希望使用您的解释和下面的帖子,我可以实现特定于我的应用程序的身份验证。 和***.com/questions/11361471/… 如果您还有什么问题,请不要犹豫写。 和***.com/questions/2683308/…

以上是关于使用 Spring 3 和 Hibernate 3 进行身份验证(基于注释)的主要内容,如果未能解决你的问题,请参考以下文章

Spring 4.1.6 和 Hibernate 3.2.2?

Mule 3.3 spring 3.1 hibernate 3.6 事务管理

Spring 4.1.0.RELEASE 和 Hibernate 4.3.6.Final 的依赖关系问题

带有注释和(动态)AbstractRoutingDataSource 的 Spring 3.1.3 + Hibernate 配置

为啥 Spring 在使用 Hibernate 3 时推迟关闭 Hibernate 会话

Spring 3.x 和 Hibernate Envers