Browse Source

修复上传文件报错的问题

houweiyu 4 years ago
parent
commit
e53d1c4722

+ 7 - 1
pom.xml

@@ -19,7 +19,7 @@
 
     <properties>
         <java.version>1.8</java.version>
-        <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
+        <spring-cloud.version>Greenwich.SR2</spring-cloud.version>
         <alibaba.version>0.9.0.RELEASE</alibaba.version>
         <nacos-config-spring-boot.version>0.2.1</nacos-config-spring-boot.version>
     </properties>
@@ -126,6 +126,12 @@
             </exclusions>
         </dependency>
 
+     <!--   <dependency>
+            <groupId>org.apache.tomcat.embed</groupId>
+            <artifactId>tomcat-embed-core</artifactId>
+            <version>9.0.33</version>
+        </dependency>-->
+
         <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>

+ 6 - 95
src/main/java/com/fcb/gateway/filter/AuthAndLogFilter.java

@@ -1,35 +1,23 @@
 package com.fcb.gateway.filter;
 
 import com.alibaba.fastjson.JSON;
-import com.fcb.gateway.util.MD5Utils;
 import lombok.extern.log4j.Log4j2;
-import org.apache.commons.lang3.StringUtils;
-import org.reactivestreams.Publisher;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cloud.gateway.filter.GatewayFilterChain;
 import org.springframework.cloud.gateway.filter.GlobalFilter;
 import org.springframework.core.Ordered;
 import org.springframework.core.io.buffer.DataBuffer;
-import org.springframework.core.io.buffer.DataBufferFactory;
-import org.springframework.core.io.buffer.DataBufferUtils;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.http.server.reactive.ServerHttpRequest;
 import org.springframework.http.server.reactive.ServerHttpResponse;
-import org.springframework.http.server.reactive.ServerHttpResponseDecorator;
 import org.springframework.stereotype.Component;
 import org.springframework.util.CollectionUtils;
-import org.springframework.util.MultiValueMap;
 import org.springframework.web.server.ServerWebExchange;
-import reactor.core.publisher.Flux;
 import reactor.core.publisher.Mono;
 
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
-import java.nio.charset.Charset;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.TreeMap;
 
 @Component
 @Log4j2
@@ -50,18 +38,18 @@ public class AuthAndLogFilter implements GlobalFilter, Ordered {
         Map<String, Object> mapResult = new HashMap<>();
         String requestUrl = exchange.getRequest().getPath().toString();
 
-        if(requestUrl.startsWith("/api/scene/camera/findBySnCode")
+        if (requestUrl.startsWith("/api/scene/camera/findBySnCode")
                 || requestUrl.startsWith("/api/manage/department/findById")
                 || requestUrl.startsWith("/api/manage/user/login")
                 || requestUrl.startsWith("/api/scene/app/getSceneStatusByUnicode")
                 || requestUrl.startsWith("/api/scene/app/getScreencapVoice")
                 || requestUrl.startsWith("/api/scene/getInfo")
-        ){
+        ) {
             log.info("白名单路径,无需校验token");
-        }else{
+        } else {
             if (!CollectionUtils.isEmpty(tokenList)) {
                 String token = tokenList.get(0);
-                if(!redisTemplate.hasKey(token)){
+                if (!redisTemplate.hasKey(token)) {
                     log.info("登录超时,需要重新登录");
                     mapResult.put("code", 500);
                     mapResult.put("message", "token已经失效,请重新登录");
@@ -69,7 +57,7 @@ public class AuthAndLogFilter implements GlobalFilter, Ordered {
                     serverHttpResponse.getHeaders().add("Content-Type", "text/plain;charset=UTF-8");
                     return serverHttpResponse.writeWith(Mono.just(bodyDataBuffer));
                 }
-            }else{
+            } else {
                 log.info("没有上送token");
                 mapResult.put("code", 500);
                 mapResult.put("message", "token缺失");
@@ -78,84 +66,7 @@ public class AuthAndLogFilter implements GlobalFilter, Ordered {
                 return serverHttpResponse.writeWith(Mono.just(bodyDataBuffer));
             }
         }
-        DataBufferFactory bufferFactory = serverHttpResponse.bufferFactory();
-        ServerHttpResponseDecorator decoratedResponse = new ServerHttpResponseDecorator(serverHttpResponse) {
-            @Override
-            public Mono<Void> writeWith(Publisher<? extends DataBuffer> body) {
-                if (body instanceof Flux) {
-                    Flux<? extends DataBuffer> fluxBody = (Flux<? extends DataBuffer>) body;
-                    return super.writeWith(fluxBody.map(dataBuffer -> {
-                        byte[] content = new byte[dataBuffer.readableByteCount()];
-                        dataBuffer.read(content);
-                        DataBufferUtils.release(dataBuffer);
-                        String resp = new String(content, Charset.forName("UTF-8"));
-                        logBuilder.append(",resp=").append(resp);
-                        log.info(logBuilder.toString());
-                        byte[] uppedContent = new String(content, Charset.forName("UTF-8")).getBytes();
-                        return bufferFactory.wrap(uppedContent);
-                    }));
-                }
-                return super.writeWith(body);
-            }
-        };
-        return chain.filter(exchange.mutate().response(decoratedResponse).build());
-    }
-
-    private Map<String, String> parseRequest(ServerWebExchange exchange, StringBuilder logBuilder) {
-        ServerHttpRequest serverHttpRequest = exchange.getRequest();
-        String method = serverHttpRequest.getMethodValue().toUpperCase();
-        logBuilder.append(method).append(",").append(serverHttpRequest.getURI());
-        MultiValueMap<String, String> query = serverHttpRequest.getQueryParams();
-        Map<String, String> params = new HashMap<>();
-        query.forEach((k, v) -> {
-            params.put(k, v.get(0));
-        });
-        if ("POST".equals(method)) {
-            String body = exchange.getAttributeOrDefault("cachedRequestBody", "");
-            if (StringUtils.isNotBlank(body)) {
-                logBuilder.append(",body=").append(body);
-                String[] kvArray = body.split("&");
-                for (String kv : kvArray) {
-                    if (kv.indexOf("=") >= 0) {
-                        String k = kv.split("=")[0];
-                        String v = kv.split("=")[1];
-                        if (!params.containsKey(k)) {
-                            try {
-                                params.put(k, URLDecoder.decode(v, "UTF-8"));
-                            } catch (UnsupportedEncodingException e) {
-                            }
-                        }
-                    }
-                }
-            }
-        }
-        return params;
-    }
-
-    private boolean checkSignature(Map<String, String> params, ServerHttpRequest serverHttpRequest) {
-
-        String sign = params.get("sign");
-        if (StringUtils.isBlank(sign)) {
-            return false;
-        }
-        //检查签名
-        Map<String, String> sorted = new TreeMap<>();
-        params.forEach((k, v) -> {
-            if (!"sign".equals(k)) {
-                sorted.put(k, v);
-            }
-        });
-        StringBuilder builder = new StringBuilder();
-        sorted.forEach((k, v) -> {
-            builder.append(k).append("=").append(v).append("&");
-        });
-        String value = builder.toString();
-        value = value.substring(0, value.length() - 1);
-        if (!sign.equalsIgnoreCase(MD5Utils.MD5(value))) {
-            return false;
-        }
-
-        return true;
+        return chain.filter(exchange);
     }
 
     @Override

+ 3 - 10
src/main/java/com/fcb/gateway/filter/CachePostBodyFilter.java

@@ -1,22 +1,15 @@
 package com.fcb.gateway.filter;
 
-import io.netty.buffer.UnpooledByteBufAllocator;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.cloud.gateway.filter.GatewayFilterChain;
 import org.springframework.cloud.gateway.filter.GlobalFilter;
-import org.springframework.cloud.gateway.support.DefaultServerRequest;
 import org.springframework.core.Ordered;
-import org.springframework.core.io.buffer.DataBuffer;
-import org.springframework.core.io.buffer.NettyDataBufferFactory;
-import org.springframework.http.HttpHeaders;
 import org.springframework.http.server.reactive.ServerHttpRequest;
-import org.springframework.http.server.reactive.ServerHttpRequestDecorator;
 import org.springframework.stereotype.Component;
-import org.springframework.web.reactive.function.server.ServerRequest;
 import org.springframework.web.server.ServerWebExchange;
-import reactor.core.publisher.Flux;
 import reactor.core.publisher.Mono;
 
+
 @Component
 @Log4j2
 public class CachePostBodyFilter implements GlobalFilter, Ordered {
@@ -27,7 +20,7 @@ public class CachePostBodyFilter implements GlobalFilter, Ordered {
         String method = serverHttpRequest.getMethodValue();
         log.info("收到请求:{}", serverHttpRequest.getURI());
         log.info("请求的参数为: {}", serverHttpRequest.getQueryParams());
-        if ("POST".equalsIgnoreCase(method)) {
+      /*  if ("POST".equalsIgnoreCase(method)) {
             ServerRequest serverRequest = new DefaultServerRequest(exchange);
             Mono<String> bodyToMono = serverRequest.bodyToMono(String.class);
             return bodyToMono.flatMap(body -> {
@@ -50,7 +43,7 @@ public class CachePostBodyFilter implements GlobalFilter, Ordered {
                 };
                 return chain.filter(exchange.mutate().request(newRequest).build());
             });
-        }
+        }*/
         return chain.filter(exchange);
     }
 

+ 15 - 0
src/main/resources/application-dev.properties

@@ -0,0 +1,15 @@
+
+spring.redis.cluster.max-redirects=3
+spring.redis.cluster.nodes=127.0.0.1:6379
+spring.redis.timeout=5000ms
+spring.redis.jedis.pool.max-active=8
+spring.redis.jedis.pool.max-idle=8
+spring.redis.jedis.pool.max-wait=-1
+spring.redis.jedis.pool.min-idle=0
+spring.redis.database=0
+spring.redis.password=
+
+# 设置单个文件大小
+spring.servlet.multipart.max-file-size= 200MB
+#设置单次请求文件的总大小
+spring.servlet.multipart.max-request-size= 200MB

+ 16 - 0
src/main/resources/application-prod.properties

@@ -0,0 +1,16 @@
+
+spring.redis.cluster.max-redirects=3
+spring.redis.cluster.nodes=10.71.184.237:7000,10.71.184.181:7000,10.71.184.217:7000
+spring.redis.timeout=5000ms
+spring.redis.jedis.pool.max-active=8
+spring.redis.jedis.pool.max-idle=8
+spring.redis.jedis.pool.max-wait=-1
+spring.redis.jedis.pool.min-idle=0
+spring.redis.database=0
+spring.redis.password=QBzhHTxfcYLTs0n5J5VQ
+
+
+# 设置单个文件大小
+spring.servlet.multipart.max-file-size= 200MB
+#设置单次请求文件的总大小
+spring.servlet.multipart.max-request-size= 200MB

+ 16 - 0
src/main/resources/application-test.properties

@@ -0,0 +1,16 @@
+
+spring.redis.cluster.max-redirects=3
+spring.redis.cluster.nodes=127.0.0.1:30064
+spring.redis.timeout=5000ms
+spring.redis.jedis.pool.max-active=8
+spring.redis.jedis.pool.max-idle=8
+spring.redis.jedis.pool.max-wait=-1
+spring.redis.jedis.pool.min-idle=0
+spring.redis.database=0
+spring.redis.password=
+
+
+# 设置单个文件大小
+spring.servlet.multipart.max-file-size= 200MB
+#设置单次请求文件的总大小
+spring.servlet.multipart.max-request-size= 200MB

+ 0 - 18
src/main/resources/application.yml

@@ -1,18 +0,0 @@
-server:
-  port: 8084
-spring:
-  redis:
-    cluster:
-      max-redirects: 3
-      nodes: 10.71.184.237:7000,10.71.184.181:7000,10.71.184.217:7000
-    timeout: 5000ms
-    jedis:
-      pool:
-        max-active: 8
-        max-idle: 8
-        max-wait: -1
-        min-idle: 0
-    password: QBzhHTxfcYLTs0n5J5VQ
-    database: 0
-logging:
-  config: classpath:log4j2-spring.xml

+ 16 - 7
src/main/resources/bootstrap.yml

@@ -1,21 +1,30 @@
+server:
+  port: 8084
 spring:
   application:
     name: gateway
   cloud:
     nacos:
       config:
-        server-addr: 10.71.5.163:80
+        server-addr: 127.0.0.1:8848
+        #server-addr: 127.0.0.1:8848
       discovery:
-        server-addr: 10.71.5.163:80
+        server-addr: 127.0.0.1:8848
+        #server-addr: 127.0.0.1:8848
     gateway:
       discovery:
         locator:
           enabled: true
       default-filters:
-      - name: Hystrix
-        args:
-          name : default
-          fallbackUri: 'forward:/defaultFallback'
+        - name: Hystrix
+          args:
+            name : default
+            fallbackUri: 'forward:/defaultFallback'
+
+  profiles:
+    active: test
+logging:
+  config: classpath:log4j2-spring.xml
 
 hystrix:
   command:
@@ -24,4 +33,4 @@ hystrix:
         isolation:
           strategy: SEMAPHORE
           thread:
-            timeoutInMilliseconds: 2000
+            timeoutInMilliseconds: 4000

+ 1 - 0
src/main/resources/log4j2-spring.xml

@@ -39,6 +39,7 @@
     <Loggers>
         <Root level="info">
             <AppenderRef ref="info-log" />
+            <AppenderRef ref="Console" />
         </Root>
         <Logger name="request" level="info"
                 additivity="false">