授权更改
以下部分与如何适应授权支持中的更改相关。
方法安全性
编译方式-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替换为AnnotationTemplateExpressionDefaultsinstance 改为:
-
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 代替 bean 和 Spring Security 会自动获取并应用它。