授权更改

以下部分涉及如何适应授权支持中的更改。spring-doc.cadn.net.cn

方法安全性

编译方式-parameters

Spring Framework 6.1 删除了 LocalVariableTableParameterNameDiscoverer。 这会影响@PreAuthorize和其他方法安全注释将处理参数名称。 如果使用带有参数名称的方法安全注释,例如:spring-doc.cadn.net.cn

使用id参数名称
@PreAuthorize("@authz.checkPermission(#id, authentication)")
public void doSomething(Long id) {
    // ...
}

您必须使用-parameters以确保参数名称在运行时可用。 有关这方面的更多信息,请访问升级到 Spring Framework 6.1 页面spring-doc.cadn.net.cn

喜爱AnnotationTemplateExpressionDefaultsPrePostTemplateDefaults

在 Spring Security 7 中,AnnotationTemplateExpressionDefaults将默认包含。spring-doc.cadn.net.cn

如果您正在自定义PrePostTemplateDefaults或者只是想看看您的应用程序如何响应AnnotationTemplateExpressionDefaults,您可以发布AnnotationTemplateExpressionDefaultsbean 而不是PrePostTemplateDefaults方法:spring-doc.cadn.net.cn

@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,PreFilterAuthorizationMethodInterceptorPostFilterAuthorizationMethodInterceptor,您可以通过调用setTemplateDefaults使用AnnotationTemplateExpressionDefaults实例:spring-doc.cadn.net.cn

@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豆。spring-doc.cadn.net.cn

如果您没有打电话AuthorizationAdvisorProxyFactory#setAdvisorsAuthorizationAdvisorProxyFactory#addAdvisor,你什么都不需要做。spring-doc.cadn.net.cn

如果是,请发布AuthorizationAdvisorbean 代替,Spring Security 将选择它并自动应用它。spring-doc.cadn.net.cn