禁用@EnableGlobalMethodSecurity进行测试

时间:2017-10-20 21:28:06

标签: spring security

我阅读了之前关于禁用@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。

请告知......

2 个答案:

答案 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")