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容器