|
对于最新的稳定版本,请使用 Spring Security 7.0.4! |
授权变更
以下部分涉及如何适应授权支持的变化。
方法安全
编译使用-parameters
Spring Framework 6.1 移除了LocalVariableTableParameterNameDiscoverer。
这影响了@PreAuthorize和其他
id参数名的方法安全注解@PreAuthorize("@authz.checkPermission(#id, authentication)")
public void doSomething(Long id) {
// ...
}
您必须使用-parameters编译以确保运行时可以获取参数名称。
有关更多信息,请访问升级到Spring框架6.1页面。
收藏AnnotationTemplateExpressionDefaults完成PrePostTemplateDefaults
在Spring Security 7 中,AnnotationTemplateExpressionDefaults 将会默认包含。
如果您正在自定义PrePostTemplateDefaults或仅仅想查看您的应用程序对AnnotationTemplateExpressionDefaults的响应,您可以发布一个AnnotationTemplateExpressionDefaults bean 而不是PrePostTemplateDefaults方法:
-
Java
-
Kotlin
-
Xml
@Bean
static AnnotationTemplateExpressionDefaults templateExpressionDefaults() {
return new AnnotationTemplateExpressionDefaults();
}
companion object {
@Bean
fun templateExpressionDefaults() = AnnotationTemplateExpressionDefaults()
}
<b:bean id="templateExpressionDefaults" class="org.springframework.security.core.annotation.AnnotationTemplateExpressionDefaults"/>
我正在发布一个 AuthorizationAdvisor Bean
如果您正在发布一个AuthorizationAdvisor bean,比如AuthorizationManagerBeforeMethodInterceptor、AuthorizationManagerAfterMethodInterceptor、PreFilterAuthorizationMethodInterceptor或PostFilterAuthorizationMethodInterceptor,您可以通过调用setTemplateDefaults方法并传入一个AnnotationTemplateExpressionDefaults实例来实现相同的功能:
-
Java
-
Kotlin
@Bean
@Role(BeanDescription.ROLE_INFRASTRUCTURE)
static Advisor preFilter() {
PreFilterAuthorizationMethodInterceptor interceptor = new PreFilterAuthorizationMethodInterceptor();
interceptor.setTemplateDefaults(new AnnotationTemplateExpressionDefaults());
return interceptor;
}
companion object {
@Bean
@Role(BeanDescription.ROLE_INFRASTRUCTURE)
fun preFilter(): Advisor {
val interceptor = PreFilterAuthorizationMethodInterceptor()
interceptor.setTemplateDefaults(AnnotationTemplateExpressionDefaults)
return interceptor
}
}
发布AuthorizationAdvisor实例,而不是将它们添加在Customizer<AuthorizationAdvisorProxyFactory>
在Spring Security 7中,虽然仍然可以自定义AuthorizationAdvisorProxyFactory实例,但添加顾问的能力将被移除,并改为通过获取发布的AuthorizationAdvisor bean来实现。
如果未调用AuthorizationAdvisorProxyFactory#setAdvisors 或 AuthorizationAdvisorProxyFactory#addAdvisor,则无需进行任何操作。
如果您需要这样做,请发布AuthorizationAdvisor bean,Spring Security将会自动拾取并应用它。