安全上

我刚刚宣布了新消息学习Spring Security课程,包括Spring Security 5中新的OAuth2堆栈的完整材料:

>>查看课程

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上

安全底

我刚刚宣布了新消息学习Spring Security课程,包括Spring Security 5中新的OAuth2堆栈的完整材料:

>>查看课程
评论在本文上关闭!