Spring Security源码(十):权限访问控制是如何做到的?
文章目录
- 〇、前文回顾
- 一、再聊过滤器链
- 二、过滤器的创建
-
- FilterSecurityInterceptor的创建
- ExceptionTranslationFilter的创建
- 三、源码流程
-
- FilterSecurityInterceptor
- ExceptionTranslationFilter
- 补充:权限表达式
- 四、总结
- 五、系列文章
-
- Spring Security 系列
- Spring Security OAuth 系列
〇、前文回顾
> 在实战篇《手把手教你如何使用Spring Security(下):访问控制》我们学习了Spring Security强大的访问控制能力,只需要进行寥寥几行的配置就能做到权限的控制,本篇来看看它到底是如何做到的。
一、再聊过滤器链
> 源码篇中反复提到,请求进来需要经过的是一堆过滤器形成的过滤器链,走完过滤器链未抛出异常则可以继续访问后台接口资源,而最后一个过滤器就是来判断请求是否有权限继续访问后台资源,如果没有则会将拒绝访问的异常往上向异常过滤器抛,异常过滤器会对异常进行翻译,然后响应给客户端。
-
所以,一般情况下最后一个过滤器是做权限访问控制的核心过滤器FilterSecurityInterceptor ,而倒数第二个是异常翻译过滤器ExceptionTranslationFilter ,将异常进行翻译然后响应给客户端。
-
比如我们实战项目过滤器链图解

二、过滤器的创建
FilterSecurityInterceptor的创建
- 这个过滤器的配置器是 ExpressionUrlAuthorizationConfigurer ,它的父类 AbstractInterceptUrlConfigurer 中的 configure() 方法创建了这个过滤器。