9.4 认证用户

来源:互联网 发布:比价商城源码 编辑:程序博客网 时间:2024/06/02 02:13

9.4 认证用户

Spring Security涵盖了许多常用的认证场景,包含如下的用户认证策略:

1)内存(基于Spring配置)用户存储库

2)基于JDBC的用户存储库

3)基于LDAP的用户存储库

4)OpenID分散式的用户身份识别系统

5)中心认证服务(CAS)

6)X.509证书

7)基于JAAS的提供者

9.4.1 配置内存用户存储库

在可用的认证策略中,最简单的一种就是直接在Spring配置中声明用户的详细信息。这可以通过使用Spring Security XML命名空间中的<user-service>元素来创建一个用户服务来实现

<user-service id="userService">

            <user name="habuma" password="letmein" authorities="ROLE_SPITTER,ROLE_ADMIN"/>

            <user name="twoqubed" password="longhorns" authorities="ROLE_SPITTER"/>

            <user name="admin"  password="admin"  authorities="ROLE_ADMIN"/>

</user-service>

用户服务现在已经准备就绪,并等待为认证功能查询用户详细信息。剩下的事情就是将其装配到Spring Security的认证管理中:

<authentication-manager>

         <authentication-provider user-service-ref="userService"/>

</authentication-manager>

<authentication-manager>元素注册一个认证管理器。更确切的讲,它将注册一个ProviderManager实例,认证管理器将把认证的任务委托给一个或多个认证提供者。在本示例中,是一个依赖于用户服务的认证提供者来获取用户详细信息。

可以将用户服务嵌入到认证提供者中:

<authentication-provider>

      <user-service id="userService">

               <user name="" password="" authorities=""/>

       </user-service>

</authentication-prpvider>

9.4.2 基于数据库进行认证

<jdbc-user-service>的使用方式与<user-service>相同。这包括将其装配到<authentication-provider>的user-service-ref属性中或者将其嵌入到<authentication-provider>中。在这里我们配置了一个带有id属性的<jdbc-user-service>,这样它可以单独声明并装配到<authentication-provider>中:

<jdbc-user-service id="userservice" data-source-ref="dataSource"/>

<jdbc-user-service>元素使用了一个JDBC数据源——通过它的data-source-ref属性来进行装配——来查询数据库并获取用户详细信息。如果没有其他的配置,用户服务就会使用如下的SQL语句来查询用户信息:

select username,password,enabled

from users

where username  = ?

默认情况下,基本的<jdbc-user-service>配置将使用如下SQL语句查询指定用户名的权限:

select username,authority

from authorities

where username = ?

<jdbc-user-service>的属性能够改变查询用户详细信息的SQL语句

1)users-by-username-query:根据用户名查询用户的用户名,密码以及是否可用的状态

2)authorities-by-username-query:根据用户名查询被授予的权限

3)group-authorities-by-username-query :根据用户名查询用户的组权限

9.4.3 基于LDAP进行认证

9.4.4 启用remember-me功能

在<http>元素中添加一个<remember-me>元素:

<http auto-config="true" use-expressions="true">

         ...

         <remember-me key="spitterKey" token-validity-seconds="2419200"/>

</http>

如果你在使用<remember-me>元素时没有任何属性,那么这个功能是通过在cookie中存储一个令牌(token)完成的,这个令牌最多2周内有效。

存储在cookie中的令牌包含用户名、密码、过期时间和一个私钥——在写入cookie前都进行了MD5哈希。默认情况下,私钥名为SpringSecured。

在登录请求页面必须包含一个名为_spring_security_remember_me的参数。

0 0
原创粉丝点击