Skip to content

Commit 89fbd76

Browse files
committed
Fix documentation for Custom Authorization Manager
1 parent 6d6552a commit 89fbd76

File tree

1 file changed

+30
-20
lines changed

1 file changed

+30
-20
lines changed

docs/modules/ROOT/pages/servlet/authorization/method-security.adoc

Lines changed: 30 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -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::
14271433
class 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)
14481456
class 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::
14871495
You 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

Comments
 (0)