Spring Security源码解读方法和技巧

一 文章参考

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:跳到下一个断点。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值