Browse Source

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

RuoYi 5 years ago
parent
commit
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 8
 public class SecurityConstants
9 9
 {
10 10
     /**
11
+     * 令牌类型
12
+     */
13
+    public static final String BEARER_TOKEN_TYPE = "Bearer";
14
+
15
+    /**
11 16
      * 授权token url
12 17
      */
13 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 1
 package com.ruoyi.common.security.feign;
2 2
 
3
+import org.springframework.http.HttpHeaders;
3 4
 import org.springframework.security.core.Authentication;
4 5
 import org.springframework.security.core.context.SecurityContext;
5 6
 import org.springframework.security.core.context.SecurityContextHolder;
6 7
 import org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationDetails;
7 8
 import org.springframework.stereotype.Component;
9
+import com.ruoyi.common.core.constant.SecurityConstants;
8 10
 import feign.RequestInterceptor;
9 11
 import feign.RequestTemplate;
10 12
 
@@ -16,10 +18,6 @@ import feign.RequestTemplate;
16 18
 @Component
17 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 21
     @Override
24 22
     public void apply(RequestTemplate requestTemplate)
25 23
     {
@@ -28,8 +26,8 @@ public class OAuth2FeignRequestInterceptor implements RequestInterceptor
28 26
         if (authentication != null && authentication.getDetails() instanceof OAuth2AuthenticationDetails)
29 27
         {
30 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 3
 import org.springframework.beans.factory.annotation.Autowired;
4 4
 import org.springframework.cloud.gateway.filter.GatewayFilter;
5 5
 import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
6
+import org.springframework.http.HttpHeaders;
6 7
 import org.springframework.http.server.reactive.ServerHttpRequest;
7 8
 import org.springframework.http.server.reactive.ServerHttpResponse;
8 9
 import org.springframework.stereotype.Component;
@@ -25,6 +26,12 @@ public class ValidateCodeFilter extends AbstractGatewayFilterFactory<Object>
25 26
     @Autowired
26 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 35
     @Override
29 36
     public GatewayFilter apply(Object config)
30 37
     {
@@ -36,10 +43,18 @@ public class ValidateCodeFilter extends AbstractGatewayFilterFactory<Object>
36 43
             {
37 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 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 59
             catch (Exception e)
45 60
             {