@@ -1377,14 +1377,17 @@ Java::
13771377[source,java,role="primary"]
13781378----
13791379@Component
1380- public class MyAuthorizationManager implements AuthorizationManager<MethodInvocation>, AuthorizationManager<MethodInvocationResult > {
1380+ public class MyPreAuthorizeAuthorizationManager implements AuthorizationManager<MethodInvocation> {
13811381 @Override
1382- public AuthorizationDecision check (Supplier<Authentication> authentication, MethodInvocation invocation) {
1382+ public AuthorizationResult authorize (Supplier<Authentication> authentication, MethodInvocation invocation) {
13831383 // ... authorization logic
13841384 }
1385+ }
13851386
1387+ @Component
1388+ public class MyPostAuthorizeAuthorizationManager implements AuthorizationManager<MethodInvocationResult> {
13861389 @Override
1387- public AuthorizationDecision check (Supplier<Authentication> authentication, MethodInvocationResult invocation) {
1390+ public AuthorizationResult authorize (Supplier<Authentication> authentication, MethodInvocationResult invocation) {
13881391 // ... authorization logic
13891392 }
13901393}
@@ -1395,12 +1398,15 @@ Kotlin::
13951398[source,kotlin,role="secondary"]
13961399----
13971400@Component
1398- class MyAuthorizationManager : AuthorizationManager<MethodInvocation>, AuthorizationManager<MethodInvocationResult > {
1399- override fun check (authentication: Supplier<Authentication>, invocation: MethodInvocation): AuthorizationDecision {
1401+ class MyPreAuthorizeAuthorizationManager : AuthorizationManager<MethodInvocation> {
1402+ override fun authorize (authentication: Supplier<Authentication>, invocation: MethodInvocation): AuthorizationResult {
14001403 // ... authorization logic
14011404 }
1405+ }
14021406
1403- override fun check(authentication: Supplier<Authentication>, invocation: MethodInvocationResult): AuthorizationDecision {
1407+ @Component
1408+ class MyPostAuthorizeAuthorizationManager : AuthorizationManager<MethodInvocationResult> {
1409+ override fun authorize(authentication: Supplier<Authentication>, invocation: MethodInvocationResult): AuthorizationResult {
14041410 // ... authorization logic
14051411 }
14061412}
@@ -1422,13 +1428,15 @@ Java::
14221428class MethodSecurityConfig {
14231429 @Bean
14241430 @Role(BeanDefinition.ROLE_INFRASTRUCTURE)
1425- Advisor preAuthorize(MyAuthorizationManager manager) {
1431+ Advisor preAuthorize() {
1432+ MyPreAuthorizeAuthorizationManager manager = new MyPreAuthorizeAuthorizationManager();
14261433 return AuthorizationManagerBeforeMethodInterceptor.preAuthorize(manager);
14271434 }
14281435
14291436 @Bean
14301437 @Role(BeanDefinition.ROLE_INFRASTRUCTURE)
1431- Advisor postAuthorize(MyAuthorizationManager manager) {
1438+ Advisor postAuthorize() {
1439+ MyPostAuthorizeAuthorizationManager manager = new MyPostAuthorizeAuthorizationManager();
14321440 return AuthorizationManagerAfterMethodInterceptor.postAuthorize(manager);
14331441 }
14341442}
@@ -1441,17 +1449,19 @@ Kotlin::
14411449@Configuration
14421450@EnableMethodSecurity(prePostEnabled = false)
14431451class MethodSecurityConfig {
1444- @Bean
1445- @Role(BeanDefinition.ROLE_INFRASTRUCTURE)
1446- fun preAuthorize(manager: MyAuthorizationManager) : Advisor {
1447- return AuthorizationManagerBeforeMethodInterceptor.preAuthorize(manager)
1448- }
1452+ @Bean
1453+ @Role(BeanDefinition.ROLE_INFRASTRUCTURE)
1454+ fun preAuthorize(): Advisor {
1455+ val manager = MyPreAuthorizeAuthorizationManager()
1456+ return AuthorizationManagerBeforeMethodInterceptor.preAuthorize(manager)
1457+ }
14491458
1450- @Bean
1451- @Role(BeanDefinition.ROLE_INFRASTRUCTURE)
1452- fun postAuthorize(manager: MyAuthorizationManager) : Advisor {
1453- return AuthorizationManagerAfterMethodInterceptor.postAuthorize(manager)
1454- }
1459+ @Bean
1460+ @Role(BeanDefinition.ROLE_INFRASTRUCTURE)
1461+ fun postAuthorize(): Advisor {
1462+ val manager = MyPostAuthorizeAuthorizationManager()
1463+ return AuthorizationManagerAfterMethodInterceptor.postAuthorize(manager)
1464+ }
14551465}
14561466----
14571467
@@ -1466,13 +1476,11 @@ Xml::
14661476<bean id="preAuthorize"
14671477 class="org.springframework.security.authorization.method.AuthorizationManagerBeforeMethodInterceptor"
14681478 factory-method="preAuthorize">
1469- <constructor-arg ref="myAuthorizationManager"/>
14701479</bean>
14711480
14721481<bean id="postAuthorize"
14731482 class="org.springframework.security.authorization.method.AuthorizationManagerAfterMethodInterceptor"
14741483 factory-method="postAuthorize">
1475- <constructor-arg ref="myAuthorizationManager"/>
14761484</bean>
14771485----
14781486======
@@ -1482,6 +1490,8 @@ Xml::
14821490You can place your interceptor in between Spring Security method interceptors using the order constants specified in `AuthorizationInterceptorsOrder`.
14831491====
14841492
1493+ Additionally, you can also implement `MethodAuthorizationDeniedHandler` by the same manager, to override default exception handling behavior.
1494+
14851495[[customizing-expression-handling]]
14861496=== Customizing Expression Handling
14871497
0 commit comments