Spring Security源码解读方法和技巧

雨点打透心脏的1/2处 2021-07-25 01:38 386阅读 0赞

一 文章参考

http://www.spring4all.com/article/443

http://www.spring4all.com/article/445

http://www.spring4all.com/article/446

http://www.spring4all.com/article/447

http://www.spring4all.com/article/448

二 代码位置

https://github.com/cakin24/gs-securing-web

https://github.com/cakin24/spring-security-ipLogin

三 需要掌握的关键类

  • SecurityContextHolder
  • Authentication
  • UsernamePasswordAuthenticationToken
  • AuthenticationManager
  • ProviderManager
  • AuthenticationProvider
  • DaoAuthenticationProvider
  • UserDetails
  • UserDetailsService
  • WebMvcConfigurerAdapter
  • WebSecurityConfigurerAdapter
  • WebSecurityConfiguration
  • AuthenticationConfiguration
  • AuthenticationManagerBuilder
  • WebSecurity
  • HttpSecurity

四 需要掌握关键过滤器

  • SecurityContextPersistenceFilter 两个主要职责:请求来临时,创建SecurityContext安全上下文信息,请求结束时清空SecurityContextHolder。
  • HeaderWriterFilter (文档中并未介绍,非核心过滤器) 用来给http响应添加一些Header,比如X-Frame-Options, X-XSS-Protection*,X-Content-Type-Options.
  • CsrfFilter 在spring4这个版本中被默认开启的一个过滤器,用于防止csrf攻击,了解前后端分离的人一定不会对这个攻击方式感到陌生,前后端使用json交互需要注意的一个问题。
  • LogoutFilter 顾名思义,处理注销的过滤器
  • UsernamePasswordAuthenticationFilter 这个会重点分析,表单提交了username和password,被封装成token进行一系列的认证,便是主要通过这个过滤器完成的,在表单认证的方法中,这是最最关键的过滤器。
  • RequestCacheAwareFilter (文档中并未介绍,非核心过滤器) 内部维护了一个RequestCache,用于缓存request请求
  • SecurityContextHolderAwareRequestFilter 此过滤器对ServletRequest进行了一次包装,使得request具有更加丰富的API
  • AnonymousAuthenticationFilter 匿名身份过滤器,这个过滤器个人认为很重要,需要将它与UsernamePasswordAuthenticationFilter 放在一起比较理解,spring security为了兼容未登录的访问,也走了一套认证流程,只不过是一个匿名的身份。
  • SessionManagementFilter 和session相关的过滤器,内部维护了一个SessionAuthenticationStrategy,两者组合使用,常用来防止session-fixation protection attack,以及限制同一用户开启多个会话的数量
  • ExceptionTranslationFilter 直译成异常翻译过滤器,还是比较形象的,这个过滤器本身不处理异常,而是将认证过程中出现的异常交给内部维护的一些类去处理,具体是那些类下面详细介绍
  • FilterSecurityInterceptor 这个过滤器决定了访问特定路径应该具备的权限,访问的用户的角色,权限是什么?访问的路径需要什么样的角色和权限?这些判断和处理都是由该类进行的。

五 学习这些关键类和过滤器的技巧

1 阅读源码

https://github.com/cakin24/gs-securing-web

https://github.com/cakin24/spring-security-ipLogin

以这两个项目作为源码阅读和调试的基础项目。进入Spring Security内部源码,理解阅读,画出各个类的UML类图。

2 调试源码

2.1 当调试关键类时,在关键函数关键位置打断点,跟踪执行流程。

2.2 当调试过滤器时,在过滤器的入口和出口打上断点,采用线程方式调试,观察各个过滤器的执行顺序以及关键变量的值。

2.3 调试常用快捷键。

F7:单步调试,能进入函数内部。

F8:单步调试,不能进入函数内部。

F9:跳到下一个断点。

发表评论

表情:
评论列表 (有 0 条评论,386人围观)

还没有评论,来说两句吧...

相关阅读