Browse Source

refactor: 修改 AuthorizationManager 相关代码

linwenhua 3 years ago
parent
commit
e13deeb854

+ 7 - 11
src/main/java/com/inspur/smsb/gateway/config/AuthorizationManager.java

@@ -1,6 +1,5 @@
 package com.inspur.smsb.gateway.config;
 
-import cn.hutool.core.convert.Convert;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.http.server.reactive.ServerHttpRequest;
@@ -29,17 +28,15 @@ public class AuthorizationManager implements ReactiveAuthorizationManager<Author
         String path = request.getURI().getPath();
         PathMatcher pathMatcher = new AntPathMatcher();
         // todo 资源权限角色关系列表,需要初始化到容器中
-        Map<Object, Object> resourceRolesMap = new HashMap<>();
-        resourceRolesMap.put("/token/**","force");
-        Iterator<Object> iterator = resourceRolesMap.keySet().iterator();
+        Map<String, List<String>> resourceRolesMap = new HashMap<>();
         List<String> authorities = new ArrayList<>();
-        while (iterator.hasNext()) {
-            String pattern = (String) iterator.next();
-            if (pathMatcher.match(pattern, path)) {
-                authorities.addAll(Convert.toList(String.class, resourceRolesMap.get(pattern)));
+        resourceRolesMap.put("/token/**",Collections.singletonList("force"));
+        resourceRolesMap.forEach((resource, roles) -> {
+            if (pathMatcher.match(resource, path)) {
+                authorities.addAll(roles);
             }
-        }
-        Mono<AuthorizationDecision> authorizationDecisionMono = mono
+        });
+        return mono
             .filter(Authentication::isAuthenticated)
             .flatMapIterable(Authentication::getAuthorities)
             .map(GrantedAuthority::getAuthority)
@@ -51,6 +48,5 @@ public class AuthorizationManager implements ReactiveAuthorizationManager<Author
             })
             .map(AuthorizationDecision::new)
             .defaultIfEmpty(new AuthorizationDecision(false));
-        return authorizationDecisionMono;
     }
 }

+ 1 - 0
src/main/java/com/inspur/smsb/gateway/config/RateLimiterConfiguration.java

@@ -1,5 +1,6 @@
 package com.inspur.smsb.gateway.config;
 
+
 import org.springframework.cloud.gateway.filter.ratelimit.KeyResolver;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;

+ 5 - 2
src/main/java/com/inspur/smsb/gateway/config/ResourceServerConfig.java

@@ -12,6 +12,7 @@ import org.springframework.security.oauth2.server.resource.authentication.JwtAut
 import org.springframework.security.oauth2.server.resource.authentication.ReactiveJwtAuthenticationConverterAdapter;
 import org.springframework.security.web.server.SecurityWebFilterChain;
 import reactor.core.publisher.Mono;
+
 import static org.springframework.security.config.Customizer.withDefaults;
 
 /**
@@ -32,11 +33,13 @@ public class ResourceServerConfig {
         http.oauth2ResourceServer().jwt()
             .jwtAuthenticationConverter(jwtAuthenticationConverter());
         http.authorizeExchange()
-            .pathMatchers("/**").permitAll() // todo 增加白名单
+            // todo 增加白名单
+            .pathMatchers("/**").permitAll()
             .anyExchange().access(authorizationManager)
             .and()
             .exceptionHandling()
-            .accessDeniedHandler(customServerAccessDeniedHandler) // 处理未授权
+            // 处理未授权
+            .accessDeniedHandler(customServerAccessDeniedHandler)
             .and().csrf().disable();
 
         return http.build();