找到注册的Spring安全过滤器
最后修改:2020年8月15日,
1.概述
Spring安全性基于一个servlet过滤器链。每个过滤器都有特定的职责,根据配置,可以添加或删除过滤器。
在本教程中,我们将讨论找到已注册Spring安全过滤器的不同方法。
2.安全调试
首先,我们将启用安全调试,它将记录每个请求的详细安全信息。
我们可以使用安全性调试调试财产:
@EnableWebSecurity (debug = true)
这样,当我们向服务器发送请求时,所有的请求信息都将被记录下来。
我们还将能够看到整个安全滤波链:
安全过滤器链:[WebAsyncManagerIntegrationFilter SecurityContextPersistenceFilter HeaderWriterFilter LogoutFilter UsernamePasswordAuthenticationFilter //…]]
3.日志记录
接下来,我们将通过启用日志记录来找到我们的安全过滤器FilterChainProxy。
我们可以通过添加以下行来启用日志记录application.properties:
logging.level.org.springframework.security.web.FilterChainProxy =调试
以下是相关的日志:
调试os security.web. filterchainproxy - /foos/1在额外的过滤器链12的位置1;调试os security.web. filterchainproxy - /foos/1在位置2的12在额外的过滤器链;DEBUG os security.web. filterchainproxy - /foo /1在额外的过滤器链12的位置3;DEBUG os security.web. filterchainproxy - /foos/1在额外的过滤器链12的位置4;调试os security.web. filterchainproxy - /foo /1在额外的过滤器链12的位置5;触发过滤器:'UsernamePasswordAuthenticationFilter'…
4.以编程方式获取筛选器
现在,我们将了解如何以编程方式获取注册的安全过滤器。
我们将使用FilterChainProxy获取安全过滤器。
首先,让我们自动装配springSecurityFilterChain豆:
@Autowired @Qualifier("springSecurityFilterChain") private Filter springSecurityFilterChain;
在这里,我们使用过@ qualifier用这个名字springSecurityFilterChain型筛选而不是FilterChainProxy。这是因为方法的原因springSecurityFilterChain ()在WebSecurityConfiguration,它创建了Spring安全过滤器链,返回类型筛选而不是FilterChainProxy。
接下来,我们将把这个对象转换为FilterChainProxy并调用getFilterChains ()方法:
public void getFilters() {FilterChainProxy FilterChainProxy = (FilterChainProxy) springSecurityFilterChain;List List = filterChainProxy.getFilterChains();list.stream() .flatMap(chain . getfilters ().stream()) .forEach(filter -> System.out.println(filter. getclass ())));}
这是一个示例输出:
类org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter类org.springframework.security.web.context.SecurityContextPersistenceFilter类org.springframework.security.web.header.HeaderWriterFilter类org.springframework.security.web.authentication.logout.LogoutFilter类org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter……
请注意,自Spring Security 3.1以来,FilterChainProxy使用SecurityFilterChain。然而,大多数应用程序只需要一个SecurityFilterChain。
5.重要的Spring安全过滤器
最后,让我们来看看一些重要的安全过滤器:
- UsernamePasswordAuthenticationFilter:处理身份验证,默认响应“/login”URL
- AnonymousAuthenticationFilter:当SecurityContextHolder中没有身份验证对象时,它创建一个匿名身份验证对象并将其放在那里
- FilterSecurityInterceptor:当访问被拒绝时引发异常
- ExceptionTranslationFilter:捕获Spring安全异常
6.结论
在这篇快速文章中,我们探索了如何以编程方式和使用日志查找已注册的Spring安全过滤器。
与往常一样,可以找到源代码在github上。