前言
本博文为听课笔记,简单记录下SpringSecurity的鉴权方式及如何在整个流程中自定义个性化鉴权,以备后续学习及工程需要。
正文
一个请求进来SpringSecurity会经过一系列的过滤器,示意图如下:
-
jwtFilter
简介:验证用户token,通过则将其保存在SpringSecurity的上下文,保持登录状态 -
FilterSecurityInterceptor
简介:SpringSecurity通过这个过滤器实现权限验证。具体做法:
- 拿到request的URL=》
- 拿到匹配器中的资源(如白名单等)与当前request中的资源匹配=》
- 匹配到的话,根据URL拿到对应角色(鉴权策略)=》
- 鉴权(对比:当前用户的角色和URL拿到的角色,对比上,有权限,否则,无权限)
对应源码:
doFilter()
:
beforeInvocation()
:在该方法中进行鉴权操作
SecurityMetadataSource
:维护所有资源、角色信息,根据当前URL获取角色信息
AffirmativeBased.decide()
:鉴权:上一步的角色和当前用户的角色进行对比 -
定制过滤器:在
FilterSecurityInterceptor
前加自定义dynamicSecurityFilter
,示意图如下: