2014-03-04 71 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。我更新了樣本以反映這一點。 –