我们都知道实现一套Spring Security 的
认证
流程, 需要设计很多和类来回切换,
Usertails , UsertailsService , AuthenticationManager
等等, 这些类名又非常的长, 所以导致我们在写的时候,思绪混乱,不知道下一步应该写什么 ,所以今天我们就通过两张图来搞明白这个认证编码的流程
Tip:最好自己是已经跟着文档或者视频做过一次Spring Security认证流程
可以看看我的上一篇博客
更加优雅的认证授权——Spring Security_Hzq958的博客-CSDN博客
第一张图——原理流程图
第二张图——编码流程图(自顶向下)
一、UsernamePasswordAuthenticationFilter
我们先仔细看看原理图
这里是把我们的用户名密码传进来,用
UsernamePasswordAuthenticationToken
接收,
紧接着封装为
authentication
对象
对应我们编码流程图 的这一块
二、
UserDetailsService
多层的过滤器,嵌套调用方法,来到
UserDetailsService
把前面的用户名密码也传到这里了
来到UserDetailsService,第一个方法就是
loadUserByUsername
, 这个方法就需要我们自己去重写,一般就是到数据库的用户表去查询用户(
这里并没有验证密码是否正确
), 然后匹配到用户的话就会来查询权限,返回一个
UserDetails
对象;否则就抛出异常。
这里对应到我们的编码流程就是这一块
因为这里涉及到要返回一个
UserDetails
类型的对象, 所以我们就需要封装这么一个对象
对应到我们的编码流程是这块
三、密码校验
返回UserDetails 对象之后, 就来到了我们的密码校验
默认的密码检验规则一般都不是我们想要的,所以这里我们要自己选中密码校验规则,
也就是我们编码流程的注入
PasswordEncode
Bean对象 到Java 工厂 ,
return 这里就是选择密码校验规则
四、返回
authentication
对象
对应我们编码流程图的这部分
五、自定义JWT 拦截器
所以我们的编码流程自顶向下的方式是非常合理, 避免了反复频繁的切换类
先编写SecurityConfig 类
这里的JWT 过滤器可以先不写
再编写LoginUser类和UserDetailsService
编写认证登录接口
最后再编写JWT 过滤器
然后再回头把Config文件 的JWT 过滤拦截放在最前面
用户
认证
指的是:验证某个用户是否为系统中的合法主体,也就是说用户能否访问该系统。用户
认证
一般要求用户提供用户名和密码。系统通过校验用户名和密码来完成
认证
过程。 通俗点说就是系统认为用户是否能
登录
。
用户授权指的是验证某个用户是否有权限执行某个操作。在一个系统中,不同用户所具有的权限是不同的。比如对一个文件来说,有的用户只能进行读取,而有的用户可以进行修改。一般来说,系统会为不同的用户分配不同的角色,而每个角色则对应一系列的权限。 通俗点讲就是系统判断用户是否有权限去做某些事情。
原文:http://blog.csdn.net/u011511684/article/details/31394493
示例下载地址:http://download.csdn.net/detail/u011511684/7506455
spring
security
里面的四个重要的类,都需自己去实现:
1、UserDetailsService 读取
登录
用户信息、权限
2、Abst...
spring
security
主要有两大功能,即
认证
和授权
1、
security
是如何
认证
账号的:
验证逻辑实现是在类AbstractUserDetailsAuthenticationProvider,此类实现了接口AuthenticationProvider的接口方法
Authentication authenticate(Authentication authentication) thr...