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 getQueryParams(ServerHttpRequest request) { HttpMethod method = request.getMethod(); Map map = new HashMap<>(); if("POST".equals(method.name())){ MultiValueMap queryParams = request.getQueryParams(); Set keySet = queryParams.keySet(); for (String s : keySet) { try { map.put(s, URLDecoder.decode(queryParams.getFirst(s), "UTF-8")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } Flux 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 queryParams = request.getQueryParams(); Set 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 getOriginalHeaderParams(ServerHttpRequest request) { HttpHeaders headers = request.getHeaders(); Map map = new HashMap<>(); Set 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; } }