@@ -1382,14 +1382,17 @@ Java::
13821382[source,java,role="primary"]
13831383----
13841384@Component
1385- public class MyAuthorizationManager implements AuthorizationManager<MethodInvocation>, AuthorizationManager<MethodInvocationResult > {
1385+ public class MyPreAuthorizeAuthorizationManager implements AuthorizationManager<MethodInvocation> {
13861386 @Override
1387- public AuthorizationResult authorize (Supplier<Authentication> authentication, MethodInvocation invocation) {
1387+ public AuthorizationDecision check (Supplier<Authentication> authentication, MethodInvocation invocation) {
13881388 // ... authorization logic
13891389 }
1390+ }
13901391
1392+ @Component
1393+ public class MyPostAuthorizeAuthorizationManager implements AuthorizationManager<MethodInvocationResult> {
13911394 @Override
1392- public AuthorizationResult authorize (Supplier<Authentication> authentication, MethodInvocationResult invocation) {
1395+ public AuthorizationDecision check (Supplier<Authentication> authentication, MethodInvocationResult invocation) {
13931396 // ... authorization logic
13941397 }
13951398}
@@ -1400,12 +1403,15 @@ Kotlin::
14001403[source,kotlin,role="secondary"]
14011404----
14021405@Component
1403- class MyAuthorizationManager : AuthorizationManager<MethodInvocation>, AuthorizationManager<MethodInvocationResult > {
1404- override fun authorize (authentication: Supplier<Authentication>, invocation: MethodInvocation): AuthorizationResult {
1406+ class MyPreAuthorizeAuthorizationManager : AuthorizationManager<MethodInvocation> {
1407+ override fun check (authentication: Supplier<Authentication>, invocation: MethodInvocation): AuthorizationDecision {
14051408 // ... authorization logic
14061409 }
1410+ }
14071411
1408- override fun authorize(authentication: Supplier<Authentication>, invocation: MethodInvocationResult): AuthorizationResult {
1412+ @Component
1413+ class MyPostAuthorizeAuthorizationManager : AuthorizationManager<MethodInvocationResult> {
1414+ override fun check(authentication: Supplier<Authentication>, invocation: MethodInvocationResult): AuthorizationDecision {
14091415 // ... authorization logic
14101416 }
14111417}
@@ -1427,13 +1433,15 @@ Java::
14271433class MethodSecurityConfig {
14281434 @Bean
14291435 @Role(BeanDefinition.ROLE_INFRASTRUCTURE)
1430- Advisor preAuthorize(MyAuthorizationManager manager) {
1436+ Advisor preAuthorize() {
1437+ MyPreAuthorizeAuthorizationManager manager = new MyPreAuthorizeAuthorizationManager();
14311438 return AuthorizationManagerBeforeMethodInterceptor.preAuthorize(manager);
14321439 }
14331440
14341441 @Bean
14351442 @Role(BeanDefinition.ROLE_INFRASTRUCTURE)
1436- Advisor postAuthorize(MyAuthorizationManager manager) {
1443+ Advisor postAuthorize() {
1444+ MyPostAuthorizeAuthorizationManager manager = new MyPostAuthorizeAuthorizationManager();
14371445 return AuthorizationManagerAfterMethodInterceptor.postAuthorize(manager);
14381446 }
14391447}
@@ -1446,17 +1454,19 @@ Kotlin::
14461454@Configuration
14471455@EnableMethodSecurity(prePostEnabled = false)
14481456class MethodSecurityConfig {
1449- @Bean
1450- @Role(BeanDefinition.ROLE_INFRASTRUCTURE)
1451- fun preAuthorize(manager: MyAuthorizationManager) : Advisor {
1452- return AuthorizationManagerBeforeMethodInterceptor.preAuthorize(manager)
1453- }
1457+ @Bean
1458+ @Role(BeanDefinition.ROLE_INFRASTRUCTURE)
1459+ fun preAuthorize(): Advisor {
1460+ val manager = MyPreAuthorizeAuthorizationManager()
1461+ return AuthorizationManagerBeforeMethodInterceptor.preAuthorize(manager)
1462+ }
14541463
1455- @Bean
1456- @Role(BeanDefinition.ROLE_INFRASTRUCTURE)
1457- fun postAuthorize(manager: MyAuthorizationManager) : Advisor {
1458- return AuthorizationManagerAfterMethodInterceptor.postAuthorize(manager)
1459- }
1464+ @Bean
1465+ @Role(BeanDefinition.ROLE_INFRASTRUCTURE)
1466+ fun postAuthorize(): Advisor {
1467+ val manager = MyPostAuthorizeAuthorizationManager()
1468+ return AuthorizationManagerAfterMethodInterceptor.postAuthorize(manager)
1469+ }
14601470}
14611471----
14621472
@@ -1471,13 +1481,11 @@ Xml::
14711481<bean id="preAuthorize"
14721482 class="org.springframework.security.authorization.method.AuthorizationManagerBeforeMethodInterceptor"
14731483 factory-method="preAuthorize">
1474- <constructor-arg ref="myAuthorizationManager"/>
14751484</bean>
14761485
14771486<bean id="postAuthorize"
14781487 class="org.springframework.security.authorization.method.AuthorizationManagerAfterMethodInterceptor"
14791488 factory-method="postAuthorize">
1480- <constructor-arg ref="myAuthorizationManager"/>
14811489</bean>
14821490----
14831491======
@@ -1487,6 +1495,8 @@ Xml::
14871495You can place your interceptor in between Spring Security method interceptors using the order constants specified in `AuthorizationInterceptorsOrder`.
14881496====
14891497
1498+ Additionally, you can also implement `MethodAuthorizationDeniedHandler` by the same manager, to override default exception handling behavior.
1499+
14901500[[customizing-expression-handling]]
14911501=== Customizing Expression Handling
14921502
0 commit comments