Explorar o código

网关验证码过滤器添加放行校验

RuoYi %!s(int64=5) %!d(string=hai) anos
pai
achega
57723b9ca1

+ 5 - 0
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/SecurityConstants.java

@@ -8,6 +8,11 @@ package com.ruoyi.common.core.constant;
8
 public class SecurityConstants
8
 public class SecurityConstants
9
 {
9
 {
10
     /**
10
     /**
11
+     * 令牌类型
12
+     */
13
+    public static final String BEARER_TOKEN_TYPE = "Bearer";
14
+
15
+    /**
11
      * 授权token url
16
      * 授权token url
12
      */
17
      */
13
     public static final String AUTH_TOKEN = "/oauth/token";
18
     public static final String AUTH_TOKEN = "/oauth/token";

+ 4 - 6
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/feign/OAuth2FeignRequestInterceptor.java

@@ -1,10 +1,12 @@
1
 package com.ruoyi.common.security.feign;
1
 package com.ruoyi.common.security.feign;
2
 
2
 
3
+import org.springframework.http.HttpHeaders;
3
 import org.springframework.security.core.Authentication;
4
 import org.springframework.security.core.Authentication;
4
 import org.springframework.security.core.context.SecurityContext;
5
 import org.springframework.security.core.context.SecurityContext;
5
 import org.springframework.security.core.context.SecurityContextHolder;
6
 import org.springframework.security.core.context.SecurityContextHolder;
6
 import org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationDetails;
7
 import org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationDetails;
7
 import org.springframework.stereotype.Component;
8
 import org.springframework.stereotype.Component;
9
+import com.ruoyi.common.core.constant.SecurityConstants;
8
 import feign.RequestInterceptor;
10
 import feign.RequestInterceptor;
9
 import feign.RequestTemplate;
11
 import feign.RequestTemplate;
10
 
12
 
@@ -16,10 +18,6 @@ import feign.RequestTemplate;
16
 @Component
18
 @Component
17
 public class OAuth2FeignRequestInterceptor implements RequestInterceptor
19
 public class OAuth2FeignRequestInterceptor implements RequestInterceptor
18
 {
20
 {
19
-    private final String AUTHORIZATION_HEADER = "Authorization";
20
-
21
-    private final String BEARER_TOKEN_TYPE = "Bearer";
22
-
23
     @Override
21
     @Override
24
     public void apply(RequestTemplate requestTemplate)
22
     public void apply(RequestTemplate requestTemplate)
25
     {
23
     {
@@ -28,8 +26,8 @@ public class OAuth2FeignRequestInterceptor implements RequestInterceptor
28
         if (authentication != null && authentication.getDetails() instanceof OAuth2AuthenticationDetails)
26
         if (authentication != null && authentication.getDetails() instanceof OAuth2AuthenticationDetails)
29
         {
27
         {
30
             OAuth2AuthenticationDetails dateils = (OAuth2AuthenticationDetails) authentication.getDetails();
28
             OAuth2AuthenticationDetails dateils = (OAuth2AuthenticationDetails) authentication.getDetails();
31
-            requestTemplate.header(AUTHORIZATION_HEADER,
32
-                    String.format("%s %s", BEARER_TOKEN_TYPE, dateils.getTokenValue()));
29
+            requestTemplate.header(HttpHeaders.AUTHORIZATION,
30
+                    String.format("%s %s", SecurityConstants.BEARER_TOKEN_TYPE, dateils.getTokenValue()));
33
         }
31
         }
34
     }
32
     }
35
 }
33
 }

+ 0 - 33
ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/properties/IgnoreClientProperties.java

@@ -1,33 +0,0 @@
1
-package com.ruoyi.gateway.config.properties;
2
-
3
-import java.util.ArrayList;
4
-import java.util.List;
5
-import org.springframework.boot.context.properties.ConfigurationProperties;
6
-import org.springframework.cloud.context.config.annotation.RefreshScope;
7
-import org.springframework.context.annotation.Configuration;
8
-
9
-/**
10
- * 放行终端配置
11
- * 
12
- * @author ruoyi
13
- */
14
-@Configuration
15
-@RefreshScope
16
-@ConfigurationProperties(prefix = "ignore")
17
-public class IgnoreClientProperties
18
-{
19
-    /**
20
-     * 放行终端配置,网关不校验此处的终端
21
-     */
22
-    private List<String> clients = new ArrayList<>();
23
-
24
-    public List<String> getClients()
25
-    {
26
-        return clients;
27
-    }
28
-
29
-    public void setClients(List<String> clients)
30
-    {
31
-        this.clients = clients;
32
-    }
33
-}

+ 17 - 2
ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/ValidateCodeFilter.java

@@ -3,6 +3,7 @@ package com.ruoyi.gateway.filter;
3
 import org.springframework.beans.factory.annotation.Autowired;
3
 import org.springframework.beans.factory.annotation.Autowired;
4
 import org.springframework.cloud.gateway.filter.GatewayFilter;
4
 import org.springframework.cloud.gateway.filter.GatewayFilter;
5
 import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
5
 import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
6
+import org.springframework.http.HttpHeaders;
6
 import org.springframework.http.server.reactive.ServerHttpRequest;
7
 import org.springframework.http.server.reactive.ServerHttpRequest;
7
 import org.springframework.http.server.reactive.ServerHttpResponse;
8
 import org.springframework.http.server.reactive.ServerHttpResponse;
8
 import org.springframework.stereotype.Component;
9
 import org.springframework.stereotype.Component;
@@ -25,6 +26,12 @@ public class ValidateCodeFilter extends AbstractGatewayFilterFactory<Object>
25
     @Autowired
26
     @Autowired
26
     private ValidateCodeService validateCodeService;
27
     private ValidateCodeService validateCodeService;
27
 
28
 
29
+    private static final String BASIC_ = "Basic ";
30
+
31
+    private static final String CODE = "code";
32
+
33
+    private static final String UUID = "uuid";
34
+
28
     @Override
35
     @Override
29
     public GatewayFilter apply(Object config)
36
     public GatewayFilter apply(Object config)
30
     {
37
     {
@@ -36,10 +43,18 @@ public class ValidateCodeFilter extends AbstractGatewayFilterFactory<Object>
36
             {
43
             {
37
                 return chain.filter(exchange);
44
                 return chain.filter(exchange);
38
             }
45
             }
46
+
47
+            // 消息头存在内容,且不存在验证码参数,不处理
48
+            String header = request.getHeaders().getFirst(HttpHeaders.AUTHORIZATION);
49
+            if (StringUtils.isNotEmpty(header) && StringUtils.startsWith(header, BASIC_)
50
+                    && !request.getQueryParams().containsKey(CODE) && !request.getQueryParams().containsKey(UUID))
51
+            {
52
+                return chain.filter(exchange);
53
+            }
39
             try
54
             try
40
             {
55
             {
41
-                validateCodeService.checkCapcha(request.getQueryParams().getFirst("code"),
42
-                        request.getQueryParams().getFirst("uuid"));
56
+                validateCodeService.checkCapcha(request.getQueryParams().getFirst(CODE),
57
+                        request.getQueryParams().getFirst(UUID));
43
             }
58
             }
44
             catch (Exception e)
59
             catch (Exception e)
45
             {
60
             {