| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 | = Authorization ChangesThe following sections relate to how to adapt to changes in the authorization support.== Method Security[[compile-with-parameters]]=== Compile With `-parameters`Spring Framework 6.1 https://github.com/spring-projects/spring-framework/issues/29559[removes LocalVariableTableParameterNameDiscoverer].This affects how `@PreAuthorize` and other xref:servlet/authorization/method-security.adoc[method security] annotations will process parameter names.If you are using method security annotations with parameter names, for example:[source,java].Method security annotation using `id` parameter name----@PreAuthorize("@authz.checkPermission(#id, authentication)")public void doSomething(Long id) {    // ...}----You must compile with `-parameters` to ensure that the parameter names are available at runtime.For more information about this, please visit the https://github.com/spring-projects/spring-framework/wiki/Upgrading-to-Spring-Framework-6.x#core-container[Upgrading to Spring Framework 6.1 page].=== Favor `AnnotationTemplateExpressionDefaults` over `PrePostTemplateDefaults`In Spring Security 7, `AnnotationTemplateExpressionDefaults` will be included by default.If you are customizing `PrePostTemplateDefaults` or simply want to see how your application responds to `AnnotationTemplateExpressionDefaults`, you can publish an `AnnotationTemplateExpressionDefaults` bean instead of a `PrePostTemplateDefaults` method:[tabs]======Java::+[source,java,role="primary"]----@Beanstatic AnnotationTemplateExpressionDefaults templateExpressionDefaults() {	return new AnnotationTemplateExpressionDefaults();}----Kotlin::+[source,kotlin,role="secondary"]----companion object {    @Bean    fun templateExpressionDefaults() = AnnotationTemplateExpressionDefaults()}----Xml::+[source,xml,role="secondary"]----<b:bean id="templateExpressionDefaults" class="org.springframework.security.core.annotation.AnnotationTemplateExpressionDefaults"/>----========== I Am Publishing an AuthorizationAdvisor BeanIf you are publishing an `AuthorizationAdvisor` bean, like `AuthorizationManagerBeforeMethodInterceptor`, `AuthorizationManagerAfterMethodInterceptor`, `PreFilterAuthorizationMethodInterceptor`, or `PostFilterAuthorizationMethodInterceptor`, you can do the same by calling `setTemplateDefaults` with an `AnnotationTemplateExpressionDefaults` instance instead:[tabs]======Java::+[source,java,role="primary"]----@Bean@Role(BeanDescription.ROLE_INFRASTRUCTURE)static Advisor preFilter() {	PreFilterAuthorizationMethodInterceptor interceptor = new PreFilterAuthorizationMethodInterceptor();	interceptor.setTemplateDefaults(new AnnotationTemplateExpressionDefaults());	return interceptor;}----Kotlin::+[source,kotlin,role="secondary"]----companion object {    @Bean    @Role(BeanDescription.ROLE_INFRASTRUCTURE)    fun preFilter(): Advisor {        val interceptor = PreFilterAuthorizationMethodInterceptor()        interceptor.setTemplateDefaults(AnnotationTemplateExpressionDefaults)        return interceptor    }}----========= Publish `AuthorizationAdvisor` instances instead of adding them in a `Customizer<AuthorizationAdvisorProxyFactory>`While the ability to customize the `AuthorizationAdvisorProxyFactory` instance will remain in Spring Security 7, the ability to add advisors will be removed in favor of picking up published `AuthorizationAdvisor` beans.If you are not calling `AuthorizationAdvisorProxyFactory#setAdvisors` or `AuthorizationAdvisorProxyFactory#addAdvisor`, you need do nothing.If you are, publish the `AuthorizationAdvisor` bean instead and Spring Security will pick it up and apply it automatically.
 |