我正在尝试使用Spring的表达式语言(SpEL)将我的application.yml
文件中的属性传递给SpEL方法调用。
我正处于Spring Boot和Spring Security环境中,我正在尝试在@PreAuthorize
注释中执行此操作。我可以毫无问题地调用方法hasAuthority()
:
@PreAuthorize("hasAuthority('APP_USER')")
这很好用。它验证用户是否具有APP_USER
授权令牌。但是,我想将此值外部化为配置作为属性。这不起作用:
@PreAuthorize("hasAuthority(#systemProperties.get('app.auth.readToken'))")
我也试过
@PreAuthorize("hasAuthority(#environment( app.auth.readToken ))")
和
@PreAuthorize("hasAuthority(${app.auth.readToken})")
那么,我如何使用SpEL将应用程序属性作为SpEL方法参数传递?这可能吗?
答案 0 :(得分:2)
您可以使用PropertyResolver
访问注释中的@propertyResolver
。
@PreAuthorize("hasRole(@propertyResolver.getProperty('app.auth.readToaken'))")
如果这不起作用,您可以在配置中提供属性@Bean
以加载您的属性。然后只访问该bean而不是propertyResolver
。以下是加载yml
文件的示例。
@Bean
public Properties properties() {
YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
yaml.setResources(new ClassPathResource("application.yml")); //the yml file
return yaml.getObject();
}
并用于注释...
@PreAuthorize("hasRole(@properties.getProperty('app.auth.readToaken'))")