SpringBoot3整合SpringSecurity6,它默默干了哪些操作?

摘要:写在前面 第一节中,我们基本上就引入SpringSecurity依赖,其他什么都没做就完成了认证功能。 之所以我们不用做什么,是因为SpringSecurity默认实现了很多功能。 当然了,这里默认实现都是基于内存的用户认证,即用户都是创建
写在前面 第一节中,我们基本上就引入SpringSecurity依赖,其他什么都没做就完成了认证功能。 之所以我们不用做什么,是因为SpringSecurity默认实现了很多功能。 当然了,这里默认实现都是基于内存的用户认证,即用户都是创建在内存当中的,实际应用都是基于数据库的。 小伙伴们不用着急,只要我们理解了基于内存的用户认证,那基于数据库也是一样的原理,不同的只是一个从内存中获取用户信息,一个从数据库中获取用户信息而已。 接下来,我们来简单看看其基本原理。 一、官方文档 官方文档对SpringSecurity 实现原理其实写的挺详细了。感兴趣的小伙伴可以点下面链接查看 https://docs.spring.io/spring-security/reference/servlet/architecture.html 但对于不少初学者,看官方文档可能会比较吃力。 所以晓凡将其简化,请接着往下看. 二、原理初探 我们以上一篇文章中案例,来看一下SpringSecurity流程。 SpringSecurity的原理其实就是一个过滤器链,如下图所示,每个过滤器各司其职。 上图中,并没有将所有过滤器都例举出来,刚开始,也没必要了解所有过滤器。 下面,我们来看看这几个主要过滤器 ① UsernamePasswordAuthenticationFilter 这个过滤器处理用户登录的请求。 就像是保安检查你的门禁卡和密码,确认你是不是小区的合法居民。 ② ExceptionTranslationFilter 这个过滤器捕获安全相关的异常,并将其转换为HTTP响应。 就像是保安发现了问题,他会采取相应的措施,比如不让你进入或者给你一个警告信息。 ③ FilterSecurityInterceptor 这个过滤器是授权的核心,它决定用户是否有权限执行特定的请求。 就像是保安检查你有没有权限去某个特定的区域。 三、 DefaultSecurityFilterChain类 为啥SpringSecurity默认帮我们实现那么多,其实主要是DefaultSecurityFilterChain的功劳,它加载了默认的15个Filter。 ① 我们在源码中找到DefaultSecurityFilterChain 类,并如下图所示加上断点看一下 ② 程序启动后,默认加载15个过滤器 四、各个过滤器作用 这里将例举出15个过滤器的作用,小伙伴们简单了解即可,切忌死记硬背,用得多了自然就记住了。 过滤器 作用 DisableEncodeUrlFilter 用来禁用URL编码。有时候,为了防止CSRF攻击,Spring Security会对重定向的URL进行编码。但如果你确定你的应用环境是安全的,可以用这个过滤器来禁用这个功能。 WebAsyncManagerIntegrationFilter 确保异步请求也能正确处理安全上下文。就像是小区保安需要确保即使是快递或者外卖这样的非正常访问,也能被正确地记录和管理。 SecurityContextHolderFilter 确保每个请求都能正确地获取到安全上下文,也就是知道当前是谁在访问。就像是小区保安需要知道是谁在小区里。 HeaderWriterFilter 会在HTTP响应中添加一些安全相关的头部,比如防止XSS攻击的头部。就像是小区保安会在小区的围墙上安装一些安全设备。 CsrfFilter 防止跨站请求伪造攻击,确保用户的操作是他们自己发起的。就像是小区保安会检查每个人的出入证,确保他们不是被坏人操控。 LogoutFilter 处理用户注销的请求,清除用户的身份信息。就像是小区保安在居民离开时,会注销他们的临时通行证。 UsernamePasswordAuthenticationFilter 处理基于用户名和密码的登录请求。就像是小区保安检查居民的门禁卡和密码。 DefaultLoginPageGeneratingFilter 在需要时生成默认的登录页面。就像是小区保安会给没有门禁卡的访客一个标准的表格来填写信息。 DefaultLogoutPageGeneratingFilter 在需要时生成默认的注销页面。就像是小区保安会给需要离开的居民一个标准的流程来完成注销。 BasicAuthenticationFilter 处理基本的身份验证,也就是基于用户名和密码的认证,但不加密。就像是小区保安检查居民的未加密的门禁卡和密码。 RequestCacheAwareFilter 记住用户最初的请求,如果因为认证被重定向,认证成功后可以回到最初的页面。
阅读全文