spring-boot - @RefreshScope 和 @Order
问题描述
我正在尝试使用@RefreshScope
with @Order
。引导运行失败并出现错误
@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
使 bean 多次初始化,因为它使用代理。可以@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
解决方案
推荐阅读
- laravel - 使用 Webpack/Laravel 混合将 CKEditor 转换为 ES5
- angular - Angular 6 迁移问题
- python-3.x - 使用 python 3 将 .csv 文件导入 sqlite3 时遇到问题
- tensorflow - 无法转换类型的对象
张量 - docker - 码头工人登录詹金斯
- r - 在 R Markdown 中导出为 PDF 时如何修复“找不到函数 read.socrata”
- c# - 使用 sqlDataSource 和 Gridview 从数据库中选择值
- rest - 用于资源修改的 REST API 设计:捕获所有 POST 与多个端点
- symfony - Symfony:路由 PUT 方法
- list - 如何遍历 Google Apps 脚本中的范围列表