spring-security的authentication模型
spring-security的核心是AuthenticationProvider:

这个接口的核心就是authenticate()方法,它接受一个Authentication类型的参数:

这个Authentication类型的两个核心参数就是Principal和Credentials。此外,Authentication还接受更细致的权限划分,提供一个getAuthorities()方法,去接受一系列的GrantedAuthority类型的参数:

上面是spring-security的一个基础的架子。后续核心要看的重点是DaoAuthenticationProvider:

上面这个DaoAuthenticationProvider是基于数据库的。
spring-security的认证核心是userDetailService(Spring Security: Database-backed UserDetailsService)。认证用的用户表很基础:

就是「用户名」和「密码」。JdbcDaoImpl是跟数据库打交道的class:

spring-security里面定义了用户表,和围绕着用户表的方法,不需要自己实现了。并且这个用户模型可以容纳所有的「认证」与「鉴权」的需求。从最简单的「用户名」+「密码」,到最复杂的「ACL」列表,全部都定义好了,根据自己的需求来使用就可以了。
多说一句spring的「鉴权」(Authorization)模型:Authorization和Authentication是分开的,Authentication只管「认证」。下面是一个spring-security实现的vote based鉴权模型(11. Authorization):

基于acl的鉴权模型(An Introduction to Spring Security ACL)位于spring-security-acl子项目里:
$ pwd
/Users/weli/works/spring-security/acl
它的项目里包含了数据库的建库sql脚本:

我们倒入sql,创建库表:

我们用vp uml反向工程这个数据库,得到er图:

上面这个模型可以实现最细颗粒度的鉴权。
- 上一篇 ruby环境下的selenium使用方法
- 下一篇 docker的gef容器