下面列出了org.springframework.http.server.reactive.ServerHttpRequest#getPath ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
/**
* 请求信息日志过滤器
*
* @param exchange ServerWebExchange
* @param chain GatewayFilterChain
* @return Mono
*/
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
ServerHttpRequest request = exchange.getRequest();
HttpHeaders headers = request.getHeaders();
HttpMethod method = request.getMethod();
RequestPath path = request.getPath();
String source = getIp(headers);
if (source == null || source.isEmpty()) {
source = request.getRemoteAddress().getAddress().getHostAddress();
}
String requestId = Util.uuid();
String fingerprint = Util.md5(source + headers.getFirst("user-agent"));
LogDto log = new LogDto();
log.setRequestId(requestId);
log.setSource(source);
log.setMethod(method.name());
log.setUrl(path.value());
log.setHeaders(headers.toSingleValueMap());
request.mutate().header("requestId", requestId).build();
request.mutate().header("fingerprint", fingerprint).build();
// 读取请求参数
MultiValueMap<String, String> params = request.getQueryParams();
log.setParams(params.isEmpty() ? null : params.toSingleValueMap());
// 如请求方法为GET或Body为空或Body不是Json,则打印日志后结束
long length = headers.getContentLength();
MediaType contentType = headers.getContentType();
if (length <= 0 || !contentType.equalsTypeAndSubtype(MediaType.APPLICATION_JSON)) {
logger.info("请求参数: {}", log.toString());
return chain.filter(exchange);
}
return readBody(exchange, chain, log);
}
@Override
public Mono<Void> handle(ServerWebExchange exchange, Throwable ex) {
ServerHttpRequest request = exchange.getRequest();
String rawQuery = request.getURI().getRawQuery();
String query = StringUtils.hasText(rawQuery) ? "?" + rawQuery : "";
HttpMethod httpMethod = request.getMethod();
String description = "HTTP " + httpMethod + " \"" + request.getPath() + query + "\"";
return Mono.error(ex).checkpoint(description + " [ExceptionHandlingWebHandler]").cast(Void.class);
}
private String formatRequest(ServerHttpRequest request) {
String rawQuery = request.getURI().getRawQuery();
String query = StringUtils.hasText(rawQuery) ? "?" + rawQuery : "";
return "HTTP " + request.getMethod() + " \"" + request.getPath() + query + "\"";
}
private String formatRequest(ServerHttpRequest request) {
String rawQuery = request.getURI().getRawQuery();
String query = StringUtils.hasText(rawQuery) ? "?" + rawQuery : "";
return "HTTP " + request.getMethod() + " \"" + request.getPath() + query + "\"";
}
/**
* 获取请求路径
*
* @param request 请求
* @return 请求路径
*/
private static String getRequestPath(ServerHttpRequest request) {
RequestPath path = request.getPath();
return path.toString();
}