2014-03-04 31 views
1

有没有一种方法可以使用我的config.properties中的布尔securityEnabled禁用全局方法安全性?任何其他方法?谢谢。禁用EnableGlobalMethodSecurity注释

@EnableWebSecurity @EnableGlobalMethodSecurity(securedEnabled =真) @PropertySource( “类路径:config.properties”)公共类 SecurityConfig扩展WebSecurityConfigurerAdapter {

@Value( “$ {} securityconfig.enabled”) private boolean securityEnabled;

...

}

+0

你必须通过注释办呢?有简单的方法如何在XML配置文件中做到这一点 – shark

+0

我宁愿使用我所有的配置与春天java配置 –

回答

1

做到这一点,最简单的方法是:

  • 提取方法的安全性自己的类
  • 取出securedEnabled属性完全
  • 重写customMethodSecurityMetadataSource方法并根据配置返回结果值。

例如:

@EnableWebSecurity 
@Configuration 
@PropertySource("classpath:config.properties") 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 
    ... 
} 

@EnableGlobalMethodSecurity 
@Configuration 
public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration { 

    @Value("${securityconfig.enabled}") 
    private boolean securityEnabled; 

    protected MethodSecurityMetadataSource customMethodSecurityMetadataSource() { 
     return securityEnabled ? new SecuredAnnotationSecurityMetadataSource() : null; 
    }  
} 
+0

这是行得通!只是一些评论,a)如果securityenabled是false我返回null和b)在我的servelet初始化类的getRootConfigClasses()方法,它从AbstractAnnotationConfigDispatcherServletInitializer扩展我需要传递SecurityConfig.class和MethodSecurityConfig.class。 –

+0

谢谢我明显错过了我的例子中的null。我更新了样本以反映这一点。 –