我有一个连接到 Azure 应用程序配置的 Spring Boot (2.6.6) 应用程序。我还使用 Azure 应用程序配置中的自动刷新机制,该机制运行良好 - 我更改 Azure 应用程序配置中的值并更新哨兵值,然后应用程序检测更改并通过调用 setter 更新 bean 值(属性)无需重新启动应用程序的方法。
但是当我添加一个带有 @EnableGlobalMethodSecurity(prePostEnabled = true) 的类后,刷新机制就不再起作用了。仅在启动期间才会设置这些值,然后不再设置。我在日志中看到应用程序检测到更改,但从未调用 bean 的 setter 来更新值。
如何解决这个问题,让自动刷新机制和 PreAuthorize 协同工作?
MethodSecurityConfiguration.class:
@Configuration
@AllArgsConstructor
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class MethodSecurityConfiguration extends GlobalMethodSecurityConfiguration {
...
}
ConfigurationProperties.class:
public interface AppConfigurationProperties {
void setExample(String example);
String getExample();
}
AzureAppConfigurationProperties.class:
@Configuration
@ConfigurationProperties(prefix = "config")
public class AzureAppConfigurationProperties implements AppConfigurationProperties {
private String example;
@Override
public void setExample(String example) {
this.example = example;
}
@Override
public String getExample() {
return this.example;
}
}
在我将应用程序升级到 Spring Boot 3 并升级了所有 jar 版本之后。 “虫子”消失了。通过升级,我也用 @EnableMethodSecurity 替换了已弃用的 @EnableGlobalMethodSecurity。