|
18 | 18 |
|
19 | 19 | import java.util.List; |
20 | 20 | import java.util.function.Function; |
21 | | -import java.util.function.Supplier; |
22 | 21 |
|
23 | 22 | import jakarta.servlet.http.HttpServletRequest; |
24 | 23 |
|
|
27 | 26 | import org.springframework.core.ResolvableType; |
28 | 27 | import org.springframework.security.access.hierarchicalroles.NullRoleHierarchy; |
29 | 28 | import org.springframework.security.access.hierarchicalroles.RoleHierarchy; |
30 | | -import org.springframework.security.authorization.AuthorityAuthorizationManager; |
31 | 29 | import org.springframework.security.authorization.AuthorizationDecision; |
32 | 30 | import org.springframework.security.authorization.AuthorizationEventPublisher; |
33 | 31 | import org.springframework.security.authorization.AuthorizationManager; |
34 | 32 | import org.springframework.security.authorization.AuthorizationManagerFactory; |
35 | 33 | import org.springframework.security.authorization.AuthorizationManagers; |
| 34 | +import org.springframework.security.authorization.DefaultAuthorizationManagerFactory; |
36 | 35 | import org.springframework.security.authorization.SpringAuthorizationEventPublisher; |
37 | 36 | import org.springframework.security.config.ObjectPostProcessor; |
38 | 37 | import org.springframework.security.config.annotation.web.AbstractRequestMatcherRegistry; |
|
45 | 44 | import org.springframework.security.web.util.matcher.RequestMatcher; |
46 | 45 | import org.springframework.security.web.util.matcher.RequestMatcherEntry; |
47 | 46 | import org.springframework.util.Assert; |
48 | | -import org.springframework.util.function.SingletonSupplier; |
49 | 47 |
|
50 | 48 | /** |
51 | 49 | * Adds a URL based authorization using {@link AuthorizationManager}. |
@@ -94,13 +92,17 @@ private AuthorizationManagerFactory<RequestAuthorizationContext> getAuthorizatio |
94 | 92 | .getBeanProvider(authorizationManagerFactoryType); |
95 | 93 |
|
96 | 94 | return authorizationManagerFactoryProvider.getIfAvailable(() -> { |
97 | | - Supplier<RoleHierarchy> roleHierarchy = SingletonSupplier |
98 | | - .of(() -> context.getBeanProvider(RoleHierarchy.class).getIfAvailable(NullRoleHierarchy::new)); |
| 95 | + RoleHierarchy roleHierarchy = context.getBeanProvider(RoleHierarchy.class) |
| 96 | + .getIfAvailable(NullRoleHierarchy::new); |
99 | 97 | GrantedAuthorityDefaults grantedAuthorityDefaults = context.getBeanProvider(GrantedAuthorityDefaults.class) |
100 | 98 | .getIfAvailable(); |
101 | 99 | String rolePrefix = (grantedAuthorityDefaults != null) ? grantedAuthorityDefaults.getRolePrefix() : "ROLE_"; |
102 | 100 |
|
103 | | - return new RequestAuthorizationContextAuthorizationManagerFactory(roleHierarchy, rolePrefix); |
| 101 | + DefaultAuthorizationManagerFactory<RequestAuthorizationContext> authorizationManagerFactory = new DefaultAuthorizationManagerFactory<>(); |
| 102 | + authorizationManagerFactory.setRoleHierarchy(roleHierarchy); |
| 103 | + authorizationManagerFactory.setRolePrefix(rolePrefix); |
| 104 | + |
| 105 | + return authorizationManagerFactory; |
104 | 106 | }); |
105 | 107 | } |
106 | 108 |
|
@@ -415,45 +417,4 @@ public AuthorizationManagerRequestMatcherRegistry equalTo(Function<Authenticatio |
415 | 417 |
|
416 | 418 | } |
417 | 419 |
|
418 | | - static final class RequestAuthorizationContextAuthorizationManagerFactory |
419 | | - implements AuthorizationManagerFactory<RequestAuthorizationContext> { |
420 | | - |
421 | | - private final Supplier<RoleHierarchy> roleHierarchy; |
422 | | - |
423 | | - private final String rolePrefix; |
424 | | - |
425 | | - RequestAuthorizationContextAuthorizationManagerFactory(Supplier<RoleHierarchy> roleHierarchy, |
426 | | - String rolePrefix) { |
427 | | - this.roleHierarchy = roleHierarchy; |
428 | | - this.rolePrefix = rolePrefix; |
429 | | - } |
430 | | - |
431 | | - @Override |
432 | | - public AuthorizationManager<RequestAuthorizationContext> hasRole(String role) { |
433 | | - return withRoleHierarchy(AuthorityAuthorizationManager.hasAnyRole(this.rolePrefix, new String[] { role })); |
434 | | - } |
435 | | - |
436 | | - @Override |
437 | | - public AuthorizationManager<RequestAuthorizationContext> hasAnyRole(String... roles) { |
438 | | - return withRoleHierarchy(AuthorityAuthorizationManager.hasAnyRole(this.rolePrefix, roles)); |
439 | | - } |
440 | | - |
441 | | - @Override |
442 | | - public AuthorizationManager<RequestAuthorizationContext> hasAuthority(String authority) { |
443 | | - return withRoleHierarchy(AuthorityAuthorizationManager.hasAuthority(authority)); |
444 | | - } |
445 | | - |
446 | | - @Override |
447 | | - public AuthorizationManager<RequestAuthorizationContext> hasAnyAuthority(String... authorities) { |
448 | | - return withRoleHierarchy(AuthorityAuthorizationManager.hasAnyAuthority(authorities)); |
449 | | - } |
450 | | - |
451 | | - private AuthorityAuthorizationManager<RequestAuthorizationContext> withRoleHierarchy( |
452 | | - AuthorityAuthorizationManager<RequestAuthorizationContext> manager) { |
453 | | - manager.setRoleHierarchy(this.roleHierarchy.get()); |
454 | | - return manager; |
455 | | - } |
456 | | - |
457 | | - } |
458 | | - |
459 | 420 | } |
0 commit comments