跳到主要内容

Spring Security源码(十):权限访问控制是如何做到的?

文章目录

  • 〇、前文回顾
  • 一、再聊过滤器链
  • 二、过滤器的创建
    • FilterSecurityInterceptor的创建
  • ExceptionTranslationFilter的创建
  • 三、源码流程
    • FilterSecurityInterceptor
  • ExceptionTranslationFilter
  • 补充:权限表达式
  • 四、总结
  • 五、系列文章
    • Spring Security 系列
  • Spring Security OAuth 系列

〇、前文回顾

> 在实战篇《手把手教你如何使用Spring Security(下):访问控制》我们学习了Spring Security强大的访问控制能力,只需要进行寥寥几行的配置就能做到权限的控制,本篇来看看它到底是如何做到的。


一、再聊过滤器链

> 源码篇中反复提到,请求进来需要经过的是一堆过滤器形成的过滤器链,走完过滤器链未抛出异常则可以继续访问后台接口资源,而最后一个过滤器就是来判断请求是否有权限继续访问后台资源,如果没有则会将拒绝访问的异常往上向异常过滤器抛,异常过滤器会对异常进行翻译,然后响应给客户端。

  • 所以,一般情况下最后一个过滤器是做权限访问控制的核心过滤器FilterSecurityInterceptor ,而倒数第二个是异常翻译过滤器ExceptionTranslationFilter ,将异常进行翻译然后响应给客户端。

  • 比如我们实战项目过滤器链图解
     


二、过滤器的创建

FilterSecurityInterceptor的创建

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