権限の変更

次のセクションでは、認可サポートの変更に適応する方法について説明します。

メソッドのセキュリティ

-parameters でコンパイルする

Spring Framework 6.1 は LocalVariableTableParameterNameDiscoverer を削除します [GitHub] (英語) 。これは、@PreAuthorize およびその他のメソッドセキュリティアノテーションがパラメーター名を処理する方法に影響します。パラメーター名を含むメソッドセキュリティアノテーションを使用している場合、例:

id パラメーター名を使用したメソッドセキュリティアノテーション
@PreAuthorize("@authz.checkPermission(#id, authentication)")
public void doSomething(Long id) {
    // ...
}

パラメーター名が実行時に使用できるようにするには、-parameters を使用してコンパイルする必要があります。詳細については、Spring Framework 6.1 ページへのアップグレード [GitHub] (英語) を参照してください。

PrePostTemplateDefaults よりも AnnotationTemplateExpressionDefaults を優先します

Spring Security 7 では、AnnotationTemplateExpressionDefaults がデフォルトで含まれます。

PrePostTemplateDefaults をカスタマイズしている場合、または単にアプリケーションが AnnotationTemplateExpressionDefaults にどのように応答するかを確認したい場合は、PrePostTemplateDefaults メソッドの代わりに AnnotationTemplateExpressionDefaults Bean を公開できます。

  • 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 を公開しています

AuthorizationManagerBeforeMethodInterceptorAuthorizationManagerAfterMethodInterceptorPreFilterAuthorizationMethodInterceptor や PostFilterAuthorizationMethodInterceptor などの AuthorizationAdvisor Bean を公開する場合は、代わりに AnnotationTemplateExpressionDefaults インスタンスを使用して setTemplateDefaults を呼び出すことで同じことができます。

  • 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
    }
}

Customizer<AuthorizationAdvisorProxyFactory> に追加するのではなく、AuthorizationAdvisor インスタンスを公開する

AuthorizationAdvisorProxyFactory インスタンスをカスタマイズする機能は Spring Security 7 に残りますが、公開された AuthorizationAdvisor Bean を選択するためにアドバイザーを追加する機能は削除されます。

AuthorizationAdvisorProxyFactory#setAdvisors または AuthorizationAdvisorProxyFactory#addAdvisor を呼び出していない場合は、何もする必要はありません。

もしそうなら、代わりに AuthorizationAdvisor Bean を公開すると、Spring Security がそれを取得して自動的に適用します。