ColdFragrance commented on issue #4477:
URL: https://github.com/apache/shenyu/issues/4477#issuecomment-1472997957
My procedure as follow
`
@Slf4j
public class MyRequestPlugin extends AbstractShenyuPlugin {
private final List<HttpMessageReader<?>> messageReaders;
@Autowired
private RedisTemplate redisTemplate;
// @Autowired
// private HttpServletRequest httpServletRequest;
/**
* CryptorRequestPlugin.
*
* @param messageReaders messageReaders
*/
public MyRequestPlugin(final List<HttpMessageReader<?>> messageReaders) {
this.messageReaders = messageReaders;
}
private static final List<HttpMessageReader<?>> MESSAGE_READERS =
HandlerStrategies.builder().build().messageReaders();
@Override
protected Mono<Void> doExecute(final ServerWebExchange exchange, final
ShenyuPluginChain chain, final SelectorData selector, final RuleData rule) {
FlowRuleHandler ruleHandle =
MyRequestPluginDataHandler.CACHED_HANDLE.get().obtainHandle(CacheKeyUtils.INST.getKey(rule));
if (Objects.isNull(ruleHandle)) {
log.error("\r\nCryptor request rule configuration is null :{}",
rule.getId());
}
Map<String, String> headMap =
exchange.getRequest().getHeaders().toSingleValueMap();
log.info("请求Head信息 >> {}", headMap);
Mono<MultiValueMap<String, String>> formData =
exchange.getFormData();
//获取form-data中的内容
formData.subscribe(map -> {
Map<String, String> formMap = map.toSingleValueMap();
log.info("form-data信息 >> {}", formMap);
});
Map<String, String> queryParams =
exchange.getRequest().getQueryParams().toSingleValueMap();
log.info("请求queryParams信息 >> {}", queryParams);
URI uri = exchange.getRequest().getURI();
log.info("请求URI >> {}", uri);
log.info("messageReaders >> {}", messageReaders);
String iniId = headMap.get("Ini-Id");
// How to get RequestBody by Synchronized way?
ServerRequest serverRequest = ServerRequest.create(exchange,
messageReaders);
System.out.println(serverRequest);
Builder b = ServerRequest.from(serverRequest);
Builder bb = b.body(exchange.getRequest().getBody());
System.out.println(b);
System.out.println(bb);
return chain.execute(exchange);
}
@Override
public int getOrder() {
return PluginEnum.REQUEST.getCode();
}
@Override
public String named() {
return PluginEnum.REQUEST.getName();
}
/**
* Rewrites Request Body.
*
* @param exchange serverWebExchange
* @param readers reader to read request-body
* @param convert convert body to new body
* @return Mono.
*/
// public static Mono<ServerWebExchange> rewriteRequestBody(final
ServerWebExchange exchange,
// final
List<HttpMessageReader<?>> readers,
// final
Function<String, Mono<String>> convert) {
//
// ServerRequest serverRequest = ServerRequest.create(exchange,
readers);
// CachedBodyOutputMessage outputMessage =
ResponseUtils.newCachedBodyOutputMessage(exchange);
//
// return serverRequest.bodyToMono(String.class)
// .switchIfEmpty(Mono.defer(() -> Mono.just("")))
// .flatMap(convert)
// .flatMap(body -> {
// BodyInserter<String, ReactiveHttpOutputMessage>
bodyInserter = BodyInserters.fromValue(body);
// return bodyInserter.insert(outputMessage, new
BodyInserterContext());
// }).then(Mono.defer(() -> {
// ServerHttpRequestDecorator decorator = new
RequestDecorator(exchange, outputMessage);
// return
Mono.just(exchange.mutate().request(decorator).build());
// })).onErrorResume(throwable ->
ResponseUtils.release(outputMessage, throwable));
//
// }
//
// /**
// * Rewrites Response Body.
// *
// * @param exchange serverWebExchange
// * @param convert convert body to new body
// * @return Mono.
// */
// public static ServerWebExchange rewriteResponseBody(final
ServerWebExchange exchange,
// final
Function<String, String> convert) {
// return exchange.mutate()
// .response(new ResponseDecorator(exchange,
convert)).build();
// }
}
`
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]