授权更改
以下部分涉及如何适应授权支持中的更改。
方法安全性
编译方式-parameters
Spring Framework 6.1 删除了 LocalVariableTableParameterNameDiscoverer。
这会影响@PreAuthorize
和其他方法安全注释将处理参数名称。
如果使用带有参数名称的方法安全注释,例如:
id
参数名称@PreAuthorize("@authz.checkPermission(#id, authentication)")
public void doSomething(Long id) {
// ...
}
您必须使用-parameters
以确保参数名称在运行时可用。
有关这方面的更多信息,请访问升级到 Spring Framework 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>
虽然能够自定义AuthorizationAdvisorProxyFactory
实例将保留在 Spring Security 7 中,添加顾问的功能将被删除,以支持选择已发布的AuthorizationAdvisor
豆。
如果您没有打电话AuthorizationAdvisorProxyFactory#setAdvisors
或AuthorizationAdvisorProxyFactory#addAdvisor
,你什么都不需要做。
如果是,请发布AuthorizationAdvisor
bean 代替,Spring Security 将选择它并自动应用它。