Spring_Security_3.0.1 中文参考文档chapter 6 核心服务

原创 2015年11月19日 10:13:18

Chapter 6.核心服务

6.1 The AuthenticationManager,ProviderManager和AuthenticationProviders

6.1.1 DaoAuthenticationProvider

spring security中最简单的AuthenticationProvider实现是DaoAuthenticationProvider。

它是UserDetailsService的杠杆(作为DAO), 为了获得username, password和GrantedAuthority。它认证用户,通过简单比较密码,在UsernamePasswordAuthenticationToken中, 和UserDetailsService中加载的信息。

<bean id="daoAuthenticationProvider"
class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
<property name="userDetailsService" ref="inMemoryDaoImpl"/>
<property name="saltSource" ref bean="saltSource"/>
<property name="passwordEncoder" ref="passwordEncoder"/>
</bean>

6.2 UserDetailsService实现

大多数认证供应器都是用了UserDetails 和UserDetailsService接口。 调用UserDetailsService中的单独的方法:

UserDetails loadUserByUsername(String username) throws UsernameNotFoundException;
返回的UserDetails是一个接口,它提供了获得保证非空的认证信息,比如用户名,密码,授予的权限和用户账号是可用还是禁用。大多数认证供应器会使用UserDetailsService, 即使username和password没有实际用在这个认证决策中。

6.2.1 内存认证

一个简单的选择是使用安全命名空间中的 user-service元素:

<user-service id="userDetailsService">
<user name="jimi" password="jimispassword" authorities="ROLE_USER, ROLE_ADMIN" />
<user name="bob" password="bobspassword" authorities="ROLE_USER" />
</user-service>
也支持使用外部的属性文件:

<user-service id="userDetailsService" properties="users.properties"/>
属性文件需要包含下面格式的内容

username=password,grantedAuthority[,grantedAuthority][,enabled|disabled]
比如

jimi=jimispassword,ROLE_USER,ROLE_ADMIN,enabled
bob=bobspassword,ROLE_USER,enabled
6.2.2 jdbcDaoImpl

Spring Security也包含了一个UserDetailsService, 它包含从一个JDBC数据源中获得认证信息。内部使用了Spring JDBC,所以它避免了负责的功能完全的对象关系映射(ORM)只用来保存用户细节。如果你的应用使用了一个ORM工具, 你应该写一个自己的UserDetailsService 重用你已经创建了的映射文件。返回到JdbcDaoImpl, 一个配置的例子如下所示:

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
<property name="url" value="jdbc:hsqldb:hsql://localhost:9001"/>
<property name="username" value="sa"/>
<property name="password" value=""/>
</bean>
<bean id="userDetailsService" class="org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl">
<property name="dataSource" ref="dataSource"/>
</bean>
6.2.2.1 权限分组

默认情况下,JdbcDaoImpl会假设用户的权限都保存在authorities表中。

6.3 密码加密

Spring Security的PasswordEncoder 接口用来支持 对密码通过一些方式进行加密,并保存到媒介中。 这通常意味着密码被“散列加密”,使用一个加密算法,比如MD5或者SHA。

6.3.1 什么是散列密码?

一个散列(或摘要)算法是一个单向方法提供了一小段固定长度的输出数据(散列)从一些输入数据中
6.3.2 为散列加点儿盐

一个方法来帮助防止这种问题是使用高强度的密码策略来防止使用常用单词。另一个是在计算散列时使用“盐值”。这是一个对每个用户都知道的附加字符串,它会结合到密码中,在计算散列之前。Spring Security有一个SaltSource接口, 可以被验证供应器用来为特定的用户生成一个盐值。 使用盐值,意味着攻击者必须创建单独的散列字典,为不同的盐值, 这让攻击更难了。

6.3.3 散列和认证

版权声明:本文为博主原创文章,未经博主允许不得转载。

Spring Security3.0.1中文参考文档

  • 2013年07月19日 15:00
  • 245KB
  • 下载

Spring Security 3.0.1 中文官方文档

  • 2013年08月16日 16:53
  • 1.94MB
  • 下载

Chapter 2 User Authentication, Authorization, and Security(6):服务器权限授予粒度

在SQL Server 2005之前,只有通过添加登录到固定服务器角色,才能获取管理权限。SQL Server 2005引入了一套服务器粒度权限,允许你定义一套严密的权限给服务器级别的登录。...

Spring+Security-3.0.1中文官方文档

  • 2013年08月06日 23:16
  • 1.6MB
  • 下载

《Python核心编程习题》---chapter6

6–14.随机数.设计一个"石头,剪子,布"游戏,有时又叫"Rochambeau",你小时候可能玩过,下面 是规则.你和你的对手,在同一时间做出特定的手势,必须是下面一种手势:石头,剪子,布.胜利者从...
  • sunliz
  • sunliz
  • 2017年06月14日 14:42
  • 91

Spring Security-3.0.1 中文官方文档

  • 2013年12月04日 10:31
  • 1.92MB
  • 下载

Spring_Security-3.0.1中文官方文档

  • 2012年09月19日 11:09
  • 1.78MB
  • 下载

Python 核心编程笔记_Chapter_6_Note_1 序列_字符串_列表_元组

基本概念都差不多了,不过看到一些内容之前没记录过,还是记录下。 顺序排序是从0开始到N-1结束 倒序排列是从N-1结束,到-1结束 很容易忽视的一个倒序基础知识 切片索引的更...

Spring Security 3.0.1中文官方文档

  • 2015年01月21日 10:33
  • 1.95MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spring_Security_3.0.1 中文参考文档chapter 6 核心服务
举报原因:
原因补充:

(最多只允许输入30个字)