当前位置: 首页 > 后端技术 > Java

SpringSecurity过滤链系统

时间:2023-04-01 17:55:04 Java

以下节选自胖哥分享的2022创业福利教程。在学习SpringSecurity的时候,是否有以下两个问题:SpringSecurity登录是如何配置的?SpringSecurity的访问控制机制是什么?上面SpringBootWebSecurityConfiguration的两个问题的答案都在配置类SpringBootWebSecurityConfiguration中。您可以按照下面的思维导图来理解这个自动配置:SpringBootWebSecurityConfiguration为SpringBoot应用程序提供了一组默认的SpringSecurity配置。返回http.build();}这里的配置是:所有请求都必须是经过认证的用户发起的,同时开启表单登录功能和HttpBasicAuthentication认证功能。当我们访问/foo/bar时,需要进行登录认证,可以进行表单登录。此配置有效。这是我们日常开发中需要自定义的,胖哥在HttpSecurity相关文章中也有说明。这个SecurityFilterChain到底是什么?SecurityFilterChain从上面可以看出HttpSecurity是一个构造类,它的任务就是构造一个SecurityFilterChain:publicinterfaceSecurityFilterChain{//当前请求是否匹配booleanmatches(HttpServletRequestrequest);//由一包过滤器组成的有序过滤器链ListgetFilters();}当请求HttpServletRequest进入SecurityFilterChain时,会使用matches方法判断是否满足进入过滤器链的条件。就好比你是VIP,通过VIP通道,就可以享受VIP的一系列待遇;如果您是普通用户,可以走普通用户通道,享受普通用户待遇。无论用户是什么角色,都遵循一个过滤器链,一个应用程序中有1-n条SecurityFilterChain。那么谁来管理多个SecurityFilterChains呢?记住这个公式HttpSecurity->SecurityFilterChain。FilterChainProxyFilterChainProxy是一个GenericFilterBean(即使ServletFilter是一个SpringBean),它管理所有注入到SpringIoC容器中的SecurityFilterChains。刚开始接触SpringSecurity的时候,我是这样配置FilterChainProxy的:过滤链模式="/do/not/filter*"filters="none"/>根据不同的请求路径匹配不同的SecurityFilterChains。下面是示意图:后面会接触这个类,现在你只需要看懂上图就可以了。请注意:不建议在同一个过滤器链中有多个FilterChainProxy实例,也不应该作为一个纯过滤器使用,它应该只承担管理SecurityFilterChain的功能。DelegatingFilterProxyServlet容器和SpringIoC容器之间的Filter生命周期不匹配。为了让SpringIoC容器管理Filter的生命周期,将FilterChainProxy委托给SpringWeb下的DelegatingFilterProxy。而且,FilterChainProxy不会对任何添加到应用程序上下文的过滤器bean调用标准的Servlet过滤器生命周期方法,FilterChainProxy的生命周期方法将委托给DelegatingFilterProxy执行。而DelegatingFilterProxy作为SpringIoC和Servlet之间的连接器存在。简单总结一下以上三个概念非常重要,涉及到SpringSecurity的整个过滤链体系。但是作为初学者,能懂多少就懂多少,不懂的不要着急,因为目前学习阶段的水平达不到是很正常的。但是当你学完SpringSecurity之后,你必须理解这些概念。关注公众号:Felordcn获取更多资讯个人博客:https://felord.cn