Spring 为测试禁用@EnableGlobalMethodSecurity
我读过上一篇关于禁用@EnableGlobalMethodSecurity的解决方案的帖子,但它对我不起作用。基本上,出于测试目的,我需要在启动时启用/禁用@PreAuthorize注释。这是我的相关代码:Spring 为测试禁用@EnableGlobalMethodSecurity,spring,security,Spring,Security,我读过上一篇关于禁用@EnableGlobalMethodSecurity的解决方案的帖子,但它对我不起作用。基本上,出于测试目的,我需要在启动时启用/禁用@PreAuthorize注释。这是我的相关代码: @Configuration @EnableGlobalMethodSecurity public class OpenAMMethodSecurityConfig extends GlobalMethodSecurityConfiguration { ... @Value("${
@Configuration
@EnableGlobalMethodSecurity
public class OpenAMMethodSecurityConfig extends GlobalMethodSecurityConfiguration {
...
@Value("${security.enabled}")
private boolean enabled;
...
protected MethodSecurityMetadataSource customMethodSecurityMetadataSource() {
return enabled ? new SecuredAnnotationSecurityMetadataSource() : null;
}
虽然代码将禁用方法安全性,但如果“enabled”标志设置为true,并且除非注释包含…(prespenabled=true),则代码将无法重新启用它。在研究代码时,我认为执行customMethodSecurityMetadataSource()后,Prespenabled会被设置为true
请建议…您可以使用测试属性根据您拥有的内容禁用设置
@TestPropertySource(properties = "security.enabled:false")
您可以创建一个测试配置,该配置将覆盖
MethodSecurityMetadataSource
,并有效防止调用安全方法。这将允许您仅在应用程序的测试部分保留逻辑,而不会用测试逻辑污染主代码。稍后,您只需将@ActiveProfiles(“安全指示灯”)
放在相应的spring引导测试上
@Configuration
@Profile("security-light")
public class SecurityLightConfiguration {
@Bean
@Primary
MethodSecurityMetadataSource doTheMagic() {
return new DelegatingMethodSecurityMetadataSource(Collections.emptyList());
}
}