gpt4 book ai didi

Spring Security HttpSecurity 配置测试

转载 作者:IT老高 更新时间:2023-10-28 13:53:04 24 4
gpt4 key购买 nike

我有一个 Spring Boot + Spring Security 应用程序,它有几个antMatchers 路径;一些 fullyAuthenticated(),一些 permitAll()

如何编写一个测试来验证 SecurityConfiguration 我的端点在 /api/** 下(以及最终其他)是否得到正确保护?

public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

protected void configure(HttpSecurity http) throws Exception {
http
//...
.antMatchers("/api/**").fullyAuthenticated()
}

}

使用 spring-boot-1.5.2.RELEASEspring-security-core-4.2.2-release

澄清1:我想尽可能直接地测试 SecurityConfiguration,而不是通过 /api/** 之一进行传递测试 个端点,它们可能有自己的 @PreAuthorize 安全性。

澄清2:我想要类似于 WebSecurityConfigurerAdapterTests 的东西.

Clarification3:我想在 Spring Security 层进行 @Autowire 一些东西,最好是 HttpSecurity 来测试。

最佳答案

所以你要确保如果有人将 .antMatchers("/api/**") 更改为 .antMatchers("/WRONG_PATH/**") 那么你有一个可以解决的测试吗?

您使用 HttpSecurity 定义的规则最终会配置一个带有一个或多个 SecurityFilterChainFilterChainProxy,每个都有一个过滤器列表。每个过滤器,例如 UsernamePasswordAuthenticationFilter(用于基于表单的登录),将在父类(super class) AbstractAuthenticationProcessingFilter 中定义一个 RequestMatcher。问题是 RequestMatcher 是一个接口(interface),目前有 12 种不同的实现,这包括 AndRequestMatcherOrRequestMatcher,所以匹配逻辑并不总是简单的。而且最重要的是RequestMatcher只有一个方法boolean matches(HttpServletRequest request),而且实现往往不会暴露配置,所以你必须使用反射来访问私有(private)每个 RequestMatcher 实现的配置(将来可能会改变)。

如果你走这条路,将 FilterChainProxy 自动连接到测试中并使用反射对配置进行逆向工程,你必须考虑你拥有的所有实现依赖项。例如 WebSecurityConfigurerAdapter 有一个默认的过滤器列表,它可能会在版本之间改变,除非禁用它,当它被禁用时,你必须明确定义每个过滤器。此外,新的过滤器和 RequestMatchers 可能会随着时间的推移添加,或者在一个 Spring Security 版本中由 HttpSecurity 生成的过滤器链在下一个版本中可能会略有不同(可能不是可能,但仍然可能)。

为您的 spring 安全配置编写一个通用测试在技术上是可行的,但这并不是一件容易的事情,而且 Spring Security 过滤器当然不是为了支持这一点而设计的。自 2010 年以来,我与 Spring Security 进行了广泛的合作,我从来没有需要过这样的测试,而且我个人认为尝试实现它会浪费时间。我认为花时间编写一个测试框架会更好,这样可以轻松编写集成测试,这将隐式测试安全层以及业务逻辑。

关于Spring Security HttpSecurity 配置测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43663688/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com