授权更改
以下部分涉及如何适应授权支持中的更改。
方法安全性
编译方式-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,您可以发布AnnotationTemplateExpressionDefaultsbean 而不是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
如果您要发布AuthorizationAdvisorbean,喜欢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,你什么都不需要做。
如果是,请发布AuthorizationAdvisorbean 代替,Spring Security 将选择它并自动应用它。