此版本仍在开发中,尚未被视为稳定版本。如需最新稳定版本,请使用 Spring Security 7.0.4spring-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框架6.1页面spring-doc.cadn.net.cn

收藏AnnotationTemplateExpressionDefaults完成PrePostTemplateDefaults

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

如果您正在自定义PrePostTemplateDefaults或仅仅想查看您的应用程序对AnnotationTemplateExpressionDefaults的响应,您可以发布一个AnnotationTemplateExpressionDefaults bean 而不是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

如果您正在发布一个AuthorizationAdvisor bean,比如AuthorizationManagerBeforeMethodInterceptorAuthorizationManagerAfterMethodInterceptorPreFilterAuthorizationMethodInterceptorPostFilterAuthorizationMethodInterceptor,您可以通过调用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>

在Spring Security 7中,虽然仍然可以自定义AuthorizationAdvisorProxyFactory实例,但添加顾问的能力将被移除,并改为通过获取发布的AuthorizationAdvisor bean来实现。spring-doc.cadn.net.cn

如果未调用AuthorizationAdvisorProxyFactory#setAdvisorsAuthorizationAdvisorProxyFactory#addAdvisor,则无需进行任何操作。spring-doc.cadn.net.cn

如果您需要这样做,请发布AuthorizationAdvisor bean,Spring Security将会自动拾取并应用它。spring-doc.cadn.net.cn