package cn.mb.cloud.gateway.filter;
|
|
|
import cn.mb.cloud.gateway.model.HeaderParams;
|
import org.springframework.core.io.buffer.DataBuffer;
|
import org.springframework.http.HttpHeaders;
|
import org.springframework.http.HttpMethod;
|
import org.springframework.http.server.reactive.ServerHttpRequest;
|
import org.springframework.util.MultiValueMap;
|
import reactor.core.publisher.Flux;
|
|
import java.io.UnsupportedEncodingException;
|
import java.net.URLDecoder;
|
import java.nio.charset.StandardCharsets;
|
import java.util.HashMap;
|
import java.util.Map;
|
import java.util.Set;
|
|
public class QueryParamsUtil {
|
|
|
/**
|
* 获取请求参数
|
* @param request
|
* @return
|
*/
|
public static Map<String, Object> getQueryParams(ServerHttpRequest request) {
|
HttpMethod method = request.getMethod();
|
Map<String, Object> map = new HashMap<>();
|
if("POST".equals(method.name())){
|
MultiValueMap<String, String> queryParams = request.getQueryParams();
|
Set<String> keySet = queryParams.keySet();
|
for (String s : keySet) {
|
try {
|
map.put(s, URLDecoder.decode(queryParams.getFirst(s), "UTF-8"));
|
} catch (UnsupportedEncodingException e) {
|
e.printStackTrace();
|
}
|
}
|
Flux<DataBuffer> body = request.getBody();
|
body.subscribe(dataBuffer -> {
|
byte[] bytes = new byte[dataBuffer.readableByteCount()];
|
dataBuffer.read(bytes);
|
String bodyStr = new String(bytes, StandardCharsets.UTF_8);
|
String[] param = bodyStr.split("&");
|
for (String s : param) {
|
String[] split = s.split("=");
|
try {
|
map.put(split[0], split.length == 1 ? "" : URLDecoder.decode(split[1], "UTF-8"));
|
} catch (UnsupportedEncodingException e) {
|
e.printStackTrace();
|
}
|
}
|
});
|
}else{
|
MultiValueMap<String, String> queryParams = request.getQueryParams();
|
Set<String> keySet = queryParams.keySet();
|
for (String s : keySet) {
|
try {
|
map.put(s, URLDecoder.decode(queryParams.getFirst(s), "UTF-8"));
|
} catch (UnsupportedEncodingException e) {
|
e.printStackTrace();
|
}
|
}
|
}
|
return map;
|
}
|
|
|
/**
|
* 获取原始Header
|
* @param request
|
* @return
|
*/
|
public static Map<String, Object> getOriginalHeaderParams(ServerHttpRequest request) {
|
HttpHeaders headers = request.getHeaders();
|
Map<String, Object> map = new HashMap<>();
|
Set<String> keySet = headers.keySet();
|
for (String s : keySet) {
|
map.put(s, headers.getFirst(s));
|
}
|
return map;
|
}
|
|
|
|
/**
|
* 获取请求header
|
* @param request
|
* @return
|
*/
|
public static HeaderParams getHeaderParams(ServerHttpRequest request) {
|
String authorization = request.getHeaders().getFirst("Authorization");
|
String role = request.getHeaders().getFirst("role");
|
String from = request.getHeaders().getFirst("from");
|
String version = request.getHeaders().getFirst("version");
|
String deviceid = request.getHeaders().getFirst("deviceid");
|
String nonce = request.getHeaders().getFirst("nonce");
|
String timestamp = request.getHeaders().getFirst("timestamp");
|
HeaderParams headerParams = new HeaderParams();
|
headerParams.setAuthorization(authorization);
|
headerParams.setRole(role);
|
headerParams.setFrom(from);
|
headerParams.setVersion(version);
|
headerParams.setDeviceid(deviceid);
|
headerParams.setNonce(nonce);
|
headerParams.setTimestamp(timestamp);
|
return headerParams;
|
}
|
|
|
|
}
|