希望在Spring API网关上实现一个代理来记录请求/响应。我为传入的请求和传出的响应定义了自己的过滤器。
请求网关筛选器:
public class RequestGatewayFilter extends AbstractGatewayFilterFactory<RequestGatewayFilter.Config> {
private static final Logger logger = LogManager.getLogger(RequestGatewayFilter.class);
public RequestGatewayFilter() {
super(Config.class);
}
@Autowired
CustomProxyLogger customLogger;
@Override
public GatewayFilter apply(Config config) {
return (exchange, chain) -> {
ServerHttpRequest.Builder builder = exchange.getRequest().mutate()
.header(PR_CORRELATION_ID, UUID.randomUUID().toString());
ServerHttpRequest request = builder.build();
customLogger.logRequest(logger, request);
return chain.filter(exchange.mutate().request(request).build());
};
}
public class ResponseGatewayFilter extends AbstractGatewayFilterFactory<ResponseGatewayFilter.Config> {
private static final Logger logger = LogManager.getLogger(ResponseGatewayFilter.class);
public ResponseGatewayFilter() {
super(Config.class);
}
@Autowired
CustomProxyLogger customLogger;
@Override
public GatewayFilter apply(Config config) {
return (exchange, chain) -> {
return chain.filter(exchange).then(Mono.fromRunnable(() -> {
ServerHttpResponse response = exchange.getResponse();
customLogger.logResponse(logger, exchange);
}));
};
}
没有一个工作...
有什么想法或可能的方法来解决这个“得到身体”的问题?
只需创建另一个过滤器
并记录所有请求和响应。
@Component
public class RequestResponseLoggingFilter implements Filter {
...
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
LOG.info(request);
chain.doFilter(request, response);
LOG.info(response);
}
}
我使用的是spring boot Version-2.0.6.Release和spring cloud Version-finchley.sr2
代码只是简单地将我的变量名设置为字符串“null”,所以我不知道如何让程序等待输入。编译器不允许我在不初始化变量的情况下声明它。
问题内容: 我对React有点陌生,尝试将className设置为string + prop。但是我不确定该怎么做以及这是否是最佳实践。 所以我正在尝试做的,显然是行不通的,是这样的: 我该如何写呢? 问题答案: 您可以使用字符串串联 或使用新的ES2015功能
我有一个枚举,我想让这些枚举类型在开关情况下成为字符串。 因此,在上面我硬编码“Mon”,而不是有一种方法,我们可以直接将枚举类型作为字符串。就目前而言,如果我在交换机案例中传递枚举类型,我将获得id 0、1或2,但我需要Mon/Tue/Wed作为字符串
问题内容: 如何将类型中的字符串指针的引用值设置为空字符串?考虑以下示例: 我尝试了和运算符的所有组合都无济于事: 显然其中一些很愚蠢,但我没有发现尝试的危害。我也尝试使用和: 这会导致编译错误 恐慌:反映:使用不可寻址的值reflect.Value.SetString 我假设这是因为Go中的字符串是不可变的? 问题答案: 字符串文字不可寻址。 取包含空字符串的变量的地址: 或使用新的:
问题内容: 使用JPA,可以为属性生成DDL: 将会 会屈服。 但是我怎样才能生产它呢? 是否可以使用-attribute,还是我需要使用-attribute? 问题答案: 几个月过去了,获得了新知识,所以我将回答我自己的问题: 产生最正确的结果。随着版本我使用,这将转化为类型有。由于varchar(max)可以替代textSQL Server的 较新版本,因此希望可以产生较新版本的SQL Ser