Explorar el Código

fix: 鉴权兼容问题

lijiaqi hace 1 año
padre
commit
8c3810bd0b

+ 3 - 5
src/main/java/com/inspur/smsb/gateway/config/AuthorizationManager.java

@@ -45,13 +45,11 @@ public class AuthorizationManager implements ReactiveAuthorizationManager<Author
             }
         });
         return mono
-            .filter(authentication -> authentication.isAuthenticated() || whiteListChecker.check(path))
+            .filter(Authentication::isAuthenticated)
             .flatMapIterable(Authentication::getAuthorities)
             .map(GrantedAuthority::getAuthority)
-            .any(roleId -> {
-                return CollectionUtils.isEmpty(authorities)?Boolean.TRUE:authorities.contains(roleId);
-            })
-            .map(AuthorizationDecision::new)
+            .any(roleId -> CollectionUtils.isEmpty(authorities) ? Boolean.TRUE:authorities.contains(roleId))
+            .map(granted -> new AuthorizationDecision(granted || whiteListChecker.check(path)))
             .defaultIfEmpty(new AuthorizationDecision(false));
     }
 }

+ 5 - 1
src/main/java/com/inspur/smsb/gateway/filter/WebFluxUserRequestInfoFilter.java

@@ -281,7 +281,11 @@ public class WebFluxUserRequestInfoFilter implements GlobalFilter {
     private boolean isEncryptedRequest(ServerHttpRequest request) {
         String sign = request.getHeaders().getFirst("sign");
         String time = request.getHeaders().getFirst("time");
-        return isValidTime(time) && md5(time).equals(sign);
+        return isWxAppletRequest(sign, time) && isValidTime(time) && md5(time).equals(sign);
+    }
+
+    private boolean isWxAppletRequest(String sign, String time) {
+        return StringUtils.hasText(sign) && StringUtils.hasText(time);
     }
 
     private boolean isValidTime(String time) {