package com.bwie.gateway.utils; import com.alibaba.fastjson.JSONObject; import com.bwie.common.result.Result; import com.bwie.common.utils.StringUtils; import lombok.extern.log4j.Log4j2; import org.springframework.core.io.buffer.DataBuffer; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.http.server.reactive.ServerHttpResponse; import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono; @Log4j2 public class GatewayUtils { public static void addHeader(ServerHttpRequest.Builder mutate, String key, Object value) { if (StringUtils.isEmpty(key)){ log.warn("添加请求头参数键不可以为空"); return; } if (value == null) { log.warn("添加请求头参数:[{}]值为空",key); return; } String valueStr = value.toString(); mutate.header(key, valueStr); log.info("添加请求头参数成功 - 键:[{}] , 值:[{}]", key , value); } public static void removeHeader(ServerHttpRequest.Builder mutate, String key) { if (StringUtils.isEmpty(key)){ log.warn("删除请求头参数键不可以为空"); return; } mutate.headers(httpHeaders -> httpHeaders.remove(key)).build(); log.info("删除请求头参数 - 键:[{}]",key); } public static Mono errorResponse(ServerWebExchange exchange, String msg, HttpStatus httpStatus) { ServerHttpResponse response = exchange.getResponse(); //设置HTTP响应头状态 response.setStatusCode(httpStatus); //设置HTTP响应头文本格式 response.getHeaders().add(HttpHeaders.CONTENT_TYPE, "application/json"); //定义响应内容 Result result = Result.error(msg); String resultJson = JSONObject.toJSONString(result); log.error("[鉴权异常处理]请求路径:[{}],异常信息:[{}],响应结果:[{}]", exchange.getRequest().getPath(), msg, resultJson); DataBuffer dataBuffer = response.bufferFactory().wrap(resultJson.getBytes()); //进行响应 return response.writeWith(Mono.just(dataBuffer)); } public static Mono errorResponse(ServerWebExchange exchange, String msg) { ServerHttpResponse response = exchange.getResponse(); response.setStatusCode(HttpStatus.OK); response.getHeaders().add(HttpHeaders.CONTENT_TYPE, "application/json"); Result result = Result.error(msg); String resultJson = JSONObject.toJSONString(result); log.error("[鉴权异常处理]请求路径:[{}],异常信息:[{}],响应结果:[{}]", exchange.getRequest().getPath(), msg, resultJson); DataBuffer dataBuffer = response.bufferFactory().wrap(resultJson.getBytes()); //进行响应 return response.writeWith(Mono.just(dataBuffer)); } }