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]

Reply via email to