此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Security 6.5.0spring-doc.cadn.net.cn

授权更改

以下部分与如何适应授权支持中的更改相关。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替换为AnnotationTemplateExpressionDefaultsinstance 改为: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 代替 bean 和 Spring Security 会自动获取并应用它。spring-doc.cadn.net.cn