Я пытаюсь использовать @RefreshScope
с @Order
. Bootrun завершается с ошибкой
@Order on WebSecurityConfigurers must be unique. Order of 2147483636 was already used on com.company.rest.config.ActuatorSecurityConf$$EnhancerBySpringCGLIB$$1e7c9a55@6559faf1, so it cannot be used on com.company.rest.config.ActuatorSecurityConf$$EnhancerBySpringCGLIB$$1e7c9a55@6559faf1 too.
@RefreshScope
заставляет компонент инициализироваться более одного раза, потому что он использует прокси. Можно ли использовать @RefreshScope
с @Order
?
@Configuration
@Order(ManagementServerProperties.ACCESS_OVERRIDE_ORDER)
@RefreshScope
public class ActuatorSecurityConf extends WebSecurityConfigurerAdapter {
private ApplicationProperties properties;
public ActuatorSecurityConf(ApplicationProperties properties) {
this.properties = properties;
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
// @formatter:off
auth.inMemoryAuthentication()
.withUser(properties.getActuatorUsername())
.password(properties.getActuatorUserPassword())
.roles("ACTUATOR");
// @formatter:on
}
@Override
protected void configure(HttpSecurity http) throws Exception {
// @formatter:off
http.antMatcher("/manage/**")
.csrf().disable()
.cors()
.and()
.authorizeRequests()
.antMatchers("/manage/info").permitAll()
.anyRequest().hasRole("ACTUATOR")
.and()
.httpBasic();
// @formatter:on
}
}
Обновление:
Удалено @RefreshScope
из @Configuration
в соответствии с рекомендациями, но ошибка по-прежнему возникает.
@Order(ManagementServerProperties.ACCESS_OVERRIDE_ORDER)
требуется, чтобы поместить его перед другим WebSecurityConfigurerAdapter
в приложении с
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
.
@Order(ManagementServerProperties.ACCESS_OVERRIDE_ORDER)
public class ActuatorSecurityConf extends WebSecurityConfigurerAdapter {
private ApplicationProperties properties;
@Autowired
public ActuatorSecurityConf(ApplicationProperties properties) {
this.properties = properties;
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
// same
}
@Override
protected void configure(HttpSecurity http) throws Exception {
// same
}
}
@Configuration
class ApplicationConfig {
@Bean
@RefreshScope
public ApplicationProperties applicationProperties() {
return new ApplicationProperties();
}
@Bean
@RefreshScope
public ActuatorSecurityConf actuatorSecurityConf() {
return new ActuatorSecurityConf(applicationProperties());
}
}
Использование Spring boot 1.5.4.RELEASE