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