最新の安定バージョンについては、Spring Security 7.0.3 を使用してください! |
権限の変更
次のセクションでは、認可サポートの変更に適応する方法について説明します。
メソッドのセキュリティ
-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 を公開しています
AuthorizationManagerBeforeMethodInterceptor、AuthorizationManagerAfterMethodInterceptor、PreFilterAuthorizationMethodInterceptor や 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 がそれを取得して自動的に適用します。