Skip to content

Commit f6bb55e

Browse files
as1605jzheaux
authored andcommitted
Fix documentation for Custom Authorization Manager
Closes gh-13967 Signed-off-by: as1605 <1605.aditya.singh@gmail.com>
1 parent 85b756c commit f6bb55e

1 file changed

Lines changed: 30 additions & 20 deletions

File tree

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

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

Comments
 (0)