作者 朱兆平

优化基于win或者linux的乱码返回方法

@@ -73,4 +73,7 @@ management: @@ -73,4 +73,7 @@ management:
73 endpoint: 73 endpoint:
74 health: 74 health:
75 show-details: always 75 show-details: always
76 -debug: false  
  76 +debug: false
  77 +host:
  78 + # 部署所在服务器操作系统名称,小写[windows/linux]
  79 + system-info: linux
@@ -10,6 +10,7 @@ import com.example.gateway.util.JsonToBean; @@ -10,6 +10,7 @@ import com.example.gateway.util.JsonToBean;
10 import lombok.extern.slf4j.Slf4j; 10 import lombok.extern.slf4j.Slf4j;
11 import org.reactivestreams.Publisher; 11 import org.reactivestreams.Publisher;
12 import org.springframework.beans.factory.annotation.Autowired; 12 import org.springframework.beans.factory.annotation.Autowired;
  13 +import org.springframework.beans.factory.annotation.Value;
13 import org.springframework.cloud.gateway.filter.GatewayFilterChain; 14 import org.springframework.cloud.gateway.filter.GatewayFilterChain;
14 import org.springframework.cloud.gateway.filter.GlobalFilter; 15 import org.springframework.cloud.gateway.filter.GlobalFilter;
15 import org.springframework.core.Ordered; 16 import org.springframework.core.Ordered;
@@ -43,6 +44,12 @@ public class WrapperResponseGlobalFilter implements GlobalFilter, Ordered { @@ -43,6 +44,12 @@ public class WrapperResponseGlobalFilter implements GlobalFilter, Ordered {
43 @Autowired 44 @Autowired
44 private StringRedisTemplate stringRedisTemplate; 45 private StringRedisTemplate stringRedisTemplate;
45 46
  47 + @Value("${host.system-info}")
  48 + private String systemInfo;
  49 +
  50 + //默认部署操作系统名称
  51 + private static final String DEFAULT_SYSTEM="linux";
  52 +
46 private static AntPathMatcher pathMatcher = new AntPathMatcher(); 53 private static AntPathMatcher pathMatcher = new AntPathMatcher();
47 54
48 @Override 55 @Override
@@ -87,8 +94,15 @@ public class WrapperResponseGlobalFilter implements GlobalFilter, Ordered { @@ -87,8 +94,15 @@ public class WrapperResponseGlobalFilter implements GlobalFilter, Ordered {
87 // } 94 // }
88 // }; 95 // };
89 96
90 - ServerHttpResponseDecorator decoratedResponseGBK= new GBKServerHttpResponseDecorator(response);  
91 - return chain.filter(exchange.mutate().response(decoratedResponseGBK).build()); 97 + ServerHttpResponseDecorator decoratedResponse= new UTF8ServerHttpResponseDecorator(response);
  98 + if (DEFAULT_SYSTEM.equals(systemInfo)){
  99 + decoratedResponse= new UTF8ServerHttpResponseDecorator(response);
  100 + }else {
  101 + decoratedResponse= new GBKServerHttpResponseDecorator(response);
  102 + }
  103 +//
  104 +
  105 + return chain.filter(exchange.mutate().response(decoratedResponse).build());
92 // 106 //
93 // return chain.filter(exchange); 107 // return chain.filter(exchange);
94 } 108 }
@@ -131,6 +145,11 @@ public class WrapperResponseGlobalFilter implements GlobalFilter, Ordered { @@ -131,6 +145,11 @@ public class WrapperResponseGlobalFilter implements GlobalFilter, Ordered {
131 return false; 145 return false;
132 } 146 }
133 147
  148 + /**
  149 + * 白名单接口访问判定
  150 + * @param request
  151 + * @return
  152 + */
134 public boolean anonymousUrlFilter(ServerHttpRequest request){ 153 public boolean anonymousUrlFilter(ServerHttpRequest request){
135 //内部服务接口,不允许外部访问 154 //内部服务接口,不允许外部访问
136 if(pathMatcher.match("/**/anonymous/**", request.getPath().toString())) { 155 if(pathMatcher.match("/**/anonymous/**", request.getPath().toString())) {
@@ -6,6 +6,7 @@ import org.springframework.core.io.buffer.DataBuffer; @@ -6,6 +6,7 @@ import org.springframework.core.io.buffer.DataBuffer;
6 import org.springframework.core.io.buffer.DataBufferFactory; 6 import org.springframework.core.io.buffer.DataBufferFactory;
7 import org.springframework.core.io.buffer.DataBufferUtils; 7 import org.springframework.core.io.buffer.DataBufferUtils;
8 import org.springframework.core.io.buffer.DefaultDataBufferFactory; 8 import org.springframework.core.io.buffer.DefaultDataBufferFactory;
  9 +import org.springframework.http.HttpStatus;
9 import org.springframework.http.server.reactive.ServerHttpResponse; 10 import org.springframework.http.server.reactive.ServerHttpResponse;
10 import org.springframework.http.server.reactive.ServerHttpResponseDecorator; 11 import org.springframework.http.server.reactive.ServerHttpResponseDecorator;
11 import reactor.core.publisher.Flux; 12 import reactor.core.publisher.Flux;
@@ -24,7 +25,7 @@ public class UTF8ServerHttpResponseDecorator extends ServerHttpResponseDecorator @@ -24,7 +25,7 @@ public class UTF8ServerHttpResponseDecorator extends ServerHttpResponseDecorator
24 @Override 25 @Override
25 public Mono<Void> writeWith(Publisher<? extends DataBuffer> body) { 26 public Mono<Void> writeWith(Publisher<? extends DataBuffer> body) {
26 27
27 - if (body instanceof Flux) { 28 + if (HttpStatus.OK.equals(getStatusCode()) && body instanceof Flux) {
28 Flux<? extends DataBuffer> fluxBody = (Flux<? extends DataBuffer>) body; 29 Flux<? extends DataBuffer> fluxBody = (Flux<? extends DataBuffer>) body;
29 return super.writeWith(fluxBody.buffer().map(dataBuffer -> { 30 return super.writeWith(fluxBody.buffer().map(dataBuffer -> {
30 DataBufferFactory dataBufferFactory = new DefaultDataBufferFactory(); 31 DataBufferFactory dataBufferFactory = new DefaultDataBufferFactory();
@@ -20,8 +20,10 @@ public class JsonToBean { @@ -20,8 +20,10 @@ public class JsonToBean {
20 USERS users = JSONObject.toJavaObject(jsonObject,USERS.class); 20 USERS users = JSONObject.toJavaObject(jsonObject,USERS.class);
21 List<PERMISSION> list = users.getPermissions(); 21 List<PERMISSION> list = users.getPermissions();
22 List<PERMISSION> permissionList = new ArrayList<>(); 22 List<PERMISSION> permissionList = new ArrayList<>();
23 - for (PERMISSION permission: list){  
24 - permissionList.add(permission); 23 + if (list!=null && !list.isEmpty()){
  24 + for (PERMISSION permission: list){
  25 + permissionList.add(permission);
  26 + }
25 } 27 }
26 return permissionList; 28 return permissionList;
27 } 29 }