16
16
17
17
package org .springframework .security .config .annotation .method .configuration ;
18
18
19
- import java .io .Serializable ;
20
-
21
19
import org .junit .jupiter .api .Test ;
22
20
import org .junit .jupiter .api .extension .ExtendWith ;
23
21
import reactor .test .StepVerifier ;
31
29
import org .springframework .security .authorization .AuthorizationDeniedException ;
32
30
import org .springframework .security .config .test .SpringTestContext ;
33
31
import org .springframework .security .config .test .SpringTestContextExtension ;
34
- import org .springframework .security .core .Authentication ;
35
32
import org .springframework .security .test .context .annotation .SecurityTestExecutionListeners ;
36
33
import org .springframework .security .test .context .support .WithMockUser ;
37
34
import org .springframework .test .context .junit .jupiter .SpringExtension ;
38
35
36
+ import static org .mockito .ArgumentMatchers .any ;
37
+ import static org .mockito .ArgumentMatchers .eq ;
38
+ import static org .mockito .BDDMockito .given ;
39
+ import static org .mockito .Mockito .mock ;
40
+ import static org .mockito .Mockito .times ;
41
+ import static org .mockito .Mockito .verify ;
42
+
39
43
@ ExtendWith ({ SpringExtension .class , SpringTestContextExtension .class })
40
44
@ SecurityTestExecutionListeners
41
45
public class PrePostReactiveMethodSecurityConfigurationTests {
@@ -211,13 +215,17 @@ void preAuthorizeWhenAllowedAndHandlerWithCustomAnnotationUsingBeanThenInvokeMet
211
215
212
216
@ Test
213
217
@ WithMockUser (roles = "ADMIN" )
214
- public void customMethodSecurityExpressionHandler () {
218
+ public void preAuthorizeWhenCustomMethodSecurityExpressionHandlerThenUses () {
215
219
this .spring .register (MethodSecurityServiceEnabledConfig .class , PermissionEvaluatorConfig .class ).autowire ();
216
220
ReactiveMethodSecurityService service = this .spring .getContext ().getBean (ReactiveMethodSecurityService .class );
221
+ PermissionEvaluator permissionEvaluator = this .spring .getContext ().getBean (PermissionEvaluator .class );
222
+ given (permissionEvaluator .hasPermission (any (), eq ("grant" ), any ())).willReturn (true );
223
+ given (permissionEvaluator .hasPermission (any (), eq ("deny" ), any ())).willReturn (false );
217
224
StepVerifier .create (service .preAuthorizeHasPermission ("grant" )).expectNext ("ok" ).verifyComplete ();
218
225
StepVerifier .create (service .preAuthorizeHasPermission ("deny" ))
219
226
.expectError (AuthorizationDeniedException .class )
220
227
.verify ();
228
+ verify (permissionEvaluator , times (2 )).hasPermission (any (), any (), any ());
221
229
}
222
230
223
231
@ Configuration
@@ -234,23 +242,17 @@ ReactiveMethodSecurityService methodSecurityService() {
234
242
@ Configuration
235
243
static class PermissionEvaluatorConfig {
236
244
245
+ @ Bean
246
+ static PermissionEvaluator permissionEvaluator () {
247
+ return mock (PermissionEvaluator .class );
248
+ }
249
+
237
250
@ Bean
238
251
@ Role (BeanDefinition .ROLE_INFRASTRUCTURE )
239
- static DefaultMethodSecurityExpressionHandler methodSecurityExpressionHandler () {
252
+ static DefaultMethodSecurityExpressionHandler methodSecurityExpressionHandler (
253
+ PermissionEvaluator permissionEvaluator ) {
240
254
DefaultMethodSecurityExpressionHandler handler = new DefaultMethodSecurityExpressionHandler ();
241
- handler .setPermissionEvaluator (new PermissionEvaluator () {
242
- @ Override
243
- public boolean hasPermission (Authentication authentication , Object targetDomainObject ,
244
- Object permission ) {
245
- return "grant" .equals (targetDomainObject );
246
- }
247
-
248
- @ Override
249
- public boolean hasPermission (Authentication authentication , Serializable targetId , String targetType ,
250
- Object permission ) {
251
- throw new UnsupportedOperationException ();
252
- }
253
- });
255
+ handler .setPermissionEvaluator (permissionEvaluator );
254
256
return handler ;
255
257
}
256
258
0 commit comments