2016-05-12 1 views
1

Если несколько классов конфигурации имеют аннотацию @EnableGlobalMethodSecurity, то используется один и один игнорируется?Несколько @EnableGlobalMethodSecurity аннотации

В приложении для весеннего ботинка есть два экземпляра WebSecurityConfigurerAdapter - один из них аннотируется @EnableGlobalMethodSecurity(secured = true), а другой - @EnableGlobalMethodSecurity(prePostEnabled = true). Но до сих пор я не могу использовать аннотацию @PreAuthorize. Имея только одну аннотацию, я вижу, что она применяется. например

@Configuration 
@Order(Ordered.HIGHEST_PRECEDENCE) 
@EnableGlobalMethodSecurity(prePostEnabled=true) 
public class FirstConfigurer extends WebSecurityConfigurerAdapter { 
... 

@Configuration 
@EnableWebSecurity 
@EnableGlobalMethodSecurity(securedEnabled = true) 
public class AnotherConfiguration extends WebSecurityConfigurerAdapter{ 
... 

ли поддержка пружинной безопасности несколько классов конфигурации аннотируемый с @EnableGlobalMethodSecurity?
Есть ли способ увидеть, что на самом деле было настроено?

ответ

0

Я отлаживаю его (в источник весны), чтобы узнать, что это была нагрузка и в каком порядке.

У меня была ситуация, аналогичная ситуации, когда у меня была библиотека (которую я не мог изменить), которая настраивает @EnableGlobalMethodSecurity(securedEnabled = true).

И я хотел бы использовать @EnableGlobalMethodSecurity(prePostEnabled=true)

Что происходило это было то, что конфигурации библиотек были загружены по моей конфигурации (только последний подгружается будет использоваться)

Я пытался использовать @Order(Ordered.LOWEST_PRECEDENCE) и @EnableGlobalMethodSecurity(order = Ordered.HIGHEST_PRECEDENCE, ... но без эффекта.

Мое решение было установить порядок, в котором я хотел, импортируя конфигурацию библиотеки в моей конфигурации, как это:

@Import(LibraryConfig.class) 
@EnableGlobalMethodSecurity(prePostEnabled=true) 
public class MyConfiguration extends GlobalMethodSecurityConfiguration { 
    /* my code */ 
} 

PLUS: я узнал, что моя ситуация еще сложнее, так как в библиотеке, что я 'm использует настройки @EnableGlobalMethodSecurity(securedEnabled = true) более одного раза. Таким образом, поведение было немного иным, и для использования моих конфигураций мне пришлось переопределить реализации этих методов:

@Bean 
public MethodSecurityMetadataSource methodSecurityMetadataSource() { 
    return super.methodSecurityMetadataSource(); 
} 

@Bean 
public MethodInterceptor methodSecurityInterceptor() throws Exception { 
    return super.methodSecurityInterceptor(); 
} 

@Bean 
public PreInvocationAuthorizationAdvice preInvocationAuthorizationAdvice() { 
    return super.preInvocationAuthorizationAdvice(); 
} 
Смежные вопросы