apache / shenyu

Apache ShenYu is a Java native API Gateway for service proxy, protocol conversion and API governance.
https://shenyu.apache.org/
Apache License 2.0
8.44k stars 2.93k forks source link

[BUG] There seems to be a problem with HystrixPlugin #2992

Closed erdengk closed 2 years ago

erdengk commented 2 years ago

Is there an existing issue for this?

Current Behavior

I've found some issues while writing integration tests for the hystrix plugin. This is one of them.

In shenyu's code, hystrix needs to configure all parameters. If there are parameters that are not configured, the background will report a java.lang.NullPointerException: null error.

There is a problem when GroupKey and CommandKey are set in the backend

Expected Behavior

If the frontend runs without setting these two parameters, the backend should handle it correctly. or Remind the user that these two parameters must be set when the front end submits

Steps To Reproduce

run shenyu-admin and shenyu-bootstrap

  1. Open the hystrix plugin
  2. Add SelectorList (just add it, this step is not the most important)

image

  1. Add rules

  2. Do not fill in the parameters in the box. The current version allows such submitted rules. image

  3. run http://localhost:9195/http/test/waf/pass

image

Environment

ShenYu version(s):2.4.2

Debug logs

The most important log should be this part

                        "methodName": "requireNonNull",
                        "fileName": "Objects.java",
                        "lineNumber": 203,
                        "className": "java.util.Objects",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "doExecute",
                        "fileName": "HystrixPlugin.java",
                        "lineNumber": 58,
                        "className": "org.apache.shenyu.plugin.hystrix.HystrixPlugin",
                        "nativeMethod": false
                    },

Here is the full log

{
    "code": 500,
    "message": "Internal Server Error",
    "data": {
        "cause": null,
        "stackTrace": [
            {
                "methodName": "requireNonNull",
                "fileName": "Objects.java",
                "lineNumber": 203,
                "className": "java.util.Objects",
                "nativeMethod": false
            }
        ],
        "message": null,
        "localizedMessage": null,
        "suppressed": [
            {
                "cause": null,
                "stackTrace": [
                    {
                        "methodName": "requireNonNull",
                        "fileName": "Objects.java",
                        "lineNumber": 203,
                        "className": "java.util.Objects",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "doExecute",
                        "fileName": "HystrixPlugin.java",
                        "lineNumber": 58,
                        "className": "org.apache.shenyu.plugin.hystrix.HystrixPlugin",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "execute",
                        "fileName": "AbstractShenyuPlugin.java",
                        "lineNumber": 93,
                        "className": "org.apache.shenyu.plugin.base.AbstractShenyuPlugin",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "lambda$execute$0",
                        "fileName": "ShenyuWebHandler.java",
                        "lineNumber": 170,
                        "className": "org.apache.shenyu.web.handler.ShenyuWebHandler$DefaultShenyuPluginChain",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "subscribe",
                        "fileName": "MonoDefer.java",
                        "lineNumber": 44,
                        "className": "reactor.core.publisher.MonoDefer",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "subscribe",
                        "fileName": "MonoDefer.java",
                        "lineNumber": 52,
                        "className": "reactor.core.publisher.MonoDefer",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "subscribe",
                        "fileName": "InternalMonoOperator.java",
                        "lineNumber": 55,
                        "className": "reactor.core.publisher.InternalMonoOperator",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "subscribe",
                        "fileName": "MonoDefer.java",
                        "lineNumber": 52,
                        "className": "reactor.core.publisher.MonoDefer",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "subscribe",
                        "fileName": "InternalMonoOperator.java",
                        "lineNumber": 55,
                        "className": "reactor.core.publisher.InternalMonoOperator",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "subscribe",
                        "fileName": "MonoDefer.java",
                        "lineNumber": 52,
                        "className": "reactor.core.publisher.MonoDefer",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "subscribe",
                        "fileName": "InternalMonoOperator.java",
                        "lineNumber": 55,
                        "className": "reactor.core.publisher.InternalMonoOperator",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "subscribe",
                        "fileName": "MonoDefer.java",
                        "lineNumber": 52,
                        "className": "reactor.core.publisher.MonoDefer",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "subscribe",
                        "fileName": "InternalMonoOperator.java",
                        "lineNumber": 55,
                        "className": "reactor.core.publisher.InternalMonoOperator",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "subscribe",
                        "fileName": "MonoDefer.java",
                        "lineNumber": 52,
                        "className": "reactor.core.publisher.MonoDefer",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "subscribe",
                        "fileName": "InternalMonoOperator.java",
                        "lineNumber": 55,
                        "className": "reactor.core.publisher.InternalMonoOperator",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "subscribe",
                        "fileName": "MonoDefer.java",
                        "lineNumber": 52,
                        "className": "reactor.core.publisher.MonoDefer",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "subscribe",
                        "fileName": "MonoDefer.java",
                        "lineNumber": 52,
                        "className": "reactor.core.publisher.MonoDefer",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "subscribe",
                        "fileName": "Mono.java",
                        "lineNumber": 4105,
                        "className": "reactor.core.publisher.Mono",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "onComplete",
                        "fileName": "FluxSwitchIfEmpty.java",
                        "lineNumber": 75,
                        "className": "reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "onNext",
                        "fileName": "MonoFlatMap.java",
                        "lineNumber": 141,
                        "className": "reactor.core.publisher.MonoFlatMap$FlatMapMain",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "onNext",
                        "fileName": "FluxSwitchIfEmpty.java",
                        "lineNumber": 67,
                        "className": "reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "onNext",
                        "fileName": "FluxFilter.java",
                        "lineNumber": 107,
                        "className": "reactor.core.publisher.FluxFilter$FilterSubscriber",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "onNext",
                        "fileName": "FluxDefaultIfEmpty.java",
                        "lineNumber": 92,
                        "className": "reactor.core.publisher.FluxDefaultIfEmpty$DefaultIfEmptySubscriber",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "onNext",
                        "fileName": "MonoNext.java",
                        "lineNumber": 76,
                        "className": "reactor.core.publisher.MonoNext$NextSubscriber",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "innerNext",
                        "fileName": "FluxConcatMap.java",
                        "lineNumber": 274,
                        "className": "reactor.core.publisher.FluxConcatMap$ConcatMapImmediate",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "onNext",
                        "fileName": "FluxConcatMap.java",
                        "lineNumber": 851,
                        "className": "reactor.core.publisher.FluxConcatMap$ConcatMapInner",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "complete",
                        "fileName": "Operators.java",
                        "lineNumber": 1630,
                        "className": "reactor.core.publisher.Operators$MonoSubscriber",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "onNext",
                        "fileName": "MonoFlatMap.java",
                        "lineNumber": 144,
                        "className": "reactor.core.publisher.MonoFlatMap$FlatMapMain",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "onNext",
                        "fileName": "FluxMapFuseable.java",
                        "lineNumber": 121,
                        "className": "reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "onNext",
                        "fileName": "FluxFilterFuseable.java",
                        "lineNumber": 112,
                        "className": "reactor.core.publisher.FluxFilterFuseable$FilterFuseableSubscriber",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "request",
                        "fileName": "Operators.java",
                        "lineNumber": 2186,
                        "className": "reactor.core.publisher.Operators$ScalarSubscription",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "request",
                        "fileName": "FluxFilterFuseable.java",
                        "lineNumber": 184,
                        "className": "reactor.core.publisher.FluxFilterFuseable$FilterFuseableSubscriber",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "request",
                        "fileName": "FluxMapFuseable.java",
                        "lineNumber": 162,
                        "className": "reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "onSubscribe",
                        "fileName": "MonoFlatMap.java",
                        "lineNumber": 103,
                        "className": "reactor.core.publisher.MonoFlatMap$FlatMapMain",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "onSubscribe",
                        "fileName": "FluxMapFuseable.java",
                        "lineNumber": 90,
                        "className": "reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "onSubscribe",
                        "fileName": "FluxFilterFuseable.java",
                        "lineNumber": 81,
                        "className": "reactor.core.publisher.FluxFilterFuseable$FilterFuseableSubscriber",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "subscribe",
                        "fileName": "MonoJust.java",
                        "lineNumber": 54,
                        "className": "reactor.core.publisher.MonoJust",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "subscribe",
                        "fileName": "Mono.java",
                        "lineNumber": 4105,
                        "className": "reactor.core.publisher.Mono",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "drain",
                        "fileName": "FluxConcatMap.java",
                        "lineNumber": 441,
                        "className": "reactor.core.publisher.FluxConcatMap$ConcatMapImmediate",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "onSubscribe",
                        "fileName": "FluxConcatMap.java",
                        "lineNumber": 211,
                        "className": "reactor.core.publisher.FluxConcatMap$ConcatMapImmediate",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "subscribe",
                        "fileName": "FluxIterable.java",
                        "lineNumber": 139,
                        "className": "reactor.core.publisher.FluxIterable",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "subscribe",
                        "fileName": "FluxIterable.java",
                        "lineNumber": 63,
                        "className": "reactor.core.publisher.FluxIterable",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "subscribe",
                        "fileName": "InternalMonoOperator.java",
                        "lineNumber": 55,
                        "className": "reactor.core.publisher.InternalMonoOperator",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "subscribe",
                        "fileName": "MonoDefer.java",
                        "lineNumber": 52,
                        "className": "reactor.core.publisher.MonoDefer",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "subscribe",
                        "fileName": "InternalMonoOperator.java",
                        "lineNumber": 55,
                        "className": "reactor.core.publisher.InternalMonoOperator",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "subscribe",
                        "fileName": "MonoDefer.java",
                        "lineNumber": 52,
                        "className": "reactor.core.publisher.MonoDefer",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "subscribe",
                        "fileName": "Mono.java",
                        "lineNumber": 4105,
                        "className": "reactor.core.publisher.Mono",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "drain",
                        "fileName": "MonoIgnoreThen.java",
                        "lineNumber": 172,
                        "className": "reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "subscribe",
                        "fileName": "MonoIgnoreThen.java",
                        "lineNumber": 56,
                        "className": "reactor.core.publisher.MonoIgnoreThen",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "subscribe",
                        "fileName": "Mono.java",
                        "lineNumber": 4105,
                        "className": "reactor.core.publisher.Mono",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "onComplete",
                        "fileName": "FluxSwitchIfEmpty.java",
                        "lineNumber": 75,
                        "className": "reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "onComplete",
                        "fileName": "FluxFilter.java",
                        "lineNumber": 160,
                        "className": "reactor.core.publisher.FluxFilter$FilterSubscriber",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "onComplete",
                        "fileName": "FluxSwitchIfEmpty.java",
                        "lineNumber": 78,
                        "className": "reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "request",
                        "fileName": "Operators.java",
                        "lineNumber": 2188,
                        "className": "reactor.core.publisher.Operators$ScalarSubscription",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "set",
                        "fileName": "Operators.java",
                        "lineNumber": 1994,
                        "className": "reactor.core.publisher.Operators$MultiSubscriptionSubscriber",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "onSubscribe",
                        "fileName": "Operators.java",
                        "lineNumber": 1868,
                        "className": "reactor.core.publisher.Operators$MultiSubscriptionSubscriber",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "subscribe",
                        "fileName": "MonoJust.java",
                        "lineNumber": 54,
                        "className": "reactor.core.publisher.MonoJust",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "subscribe",
                        "fileName": "Mono.java",
                        "lineNumber": 4105,
                        "className": "reactor.core.publisher.Mono",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "onComplete",
                        "fileName": "FluxSwitchIfEmpty.java",
                        "lineNumber": 75,
                        "className": "reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "onComplete",
                        "fileName": "MonoNext.java",
                        "lineNumber": 96,
                        "className": "reactor.core.publisher.MonoNext$NextSubscriber",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "onComplete",
                        "fileName": "FluxFilter.java",
                        "lineNumber": 160,
                        "className": "reactor.core.publisher.FluxFilter$FilterSubscriber",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "checkTerminated",
                        "fileName": "FluxFlatMap.java",
                        "lineNumber": 823,
                        "className": "reactor.core.publisher.FluxFlatMap$FlatMapMain",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "drainLoop",
                        "fileName": "FluxFlatMap.java",
                        "lineNumber": 589,
                        "className": "reactor.core.publisher.FluxFlatMap$FlatMapMain",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "drain",
                        "fileName": "FluxFlatMap.java",
                        "lineNumber": 569,
                        "className": "reactor.core.publisher.FluxFlatMap$FlatMapMain",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "onComplete",
                        "fileName": "FluxFlatMap.java",
                        "lineNumber": 455,
                        "className": "reactor.core.publisher.FluxFlatMap$FlatMapMain",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "slowPath",
                        "fileName": "FluxIterable.java",
                        "lineNumber": 265,
                        "className": "reactor.core.publisher.FluxIterable$IterableSubscription",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "request",
                        "fileName": "FluxIterable.java",
                        "lineNumber": 201,
                        "className": "reactor.core.publisher.FluxIterable$IterableSubscription",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "onSubscribe",
                        "fileName": "FluxFlatMap.java",
                        "lineNumber": 363,
                        "className": "reactor.core.publisher.FluxFlatMap$FlatMapMain",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "subscribe",
                        "fileName": "FluxIterable.java",
                        "lineNumber": 139,
                        "className": "reactor.core.publisher.FluxIterable",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "subscribe",
                        "fileName": "FluxIterable.java",
                        "lineNumber": 63,
                        "className": "reactor.core.publisher.FluxIterable",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "subscribe",
                        "fileName": "InternalMonoOperator.java",
                        "lineNumber": 55,
                        "className": "reactor.core.publisher.InternalMonoOperator",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "subscribe",
                        "fileName": "MonoDefer.java",
                        "lineNumber": 52,
                        "className": "reactor.core.publisher.MonoDefer",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "onNext",
                        "fileName": "MonoFlatMap.java",
                        "lineNumber": 150,
                        "className": "reactor.core.publisher.MonoFlatMap$FlatMapMain",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "complete",
                        "fileName": "Operators.java",
                        "lineNumber": 1630,
                        "className": "reactor.core.publisher.Operators$MonoSubscriber",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "onComplete",
                        "fileName": "FluxDefaultIfEmpty.java",
                        "lineNumber": 100,
                        "className": "reactor.core.publisher.FluxDefaultIfEmpty$DefaultIfEmptySubscriber",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "onComplete",
                        "fileName": "FluxMap.java",
                        "lineNumber": 136,
                        "className": "reactor.core.publisher.FluxMap$MapSubscriber",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "onComplete",
                        "fileName": "FluxMap.java",
                        "lineNumber": 136,
                        "className": "reactor.core.publisher.FluxMap$MapSubscriber",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "onComplete",
                        "fileName": "FluxFilter.java",
                        "lineNumber": 160,
                        "className": "reactor.core.publisher.FluxFilter$FilterSubscriber",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "onComplete",
                        "fileName": "FluxMap.java",
                        "lineNumber": 262,
                        "className": "reactor.core.publisher.FluxMap$MapConditionalSubscriber",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "complete",
                        "fileName": "Operators.java",
                        "lineNumber": 1631,
                        "className": "reactor.core.publisher.Operators$MonoSubscriber",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "onNext",
                        "fileName": "MonoProcessor.java",
                        "lineNumber": 317,
                        "className": "reactor.core.publisher.MonoProcessor",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "onNext",
                        "fileName": "FluxPeek.java",
                        "lineNumber": 192,
                        "className": "reactor.core.publisher.FluxPeek$PeekSubscriber",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "onNext",
                        "fileName": "FluxSwitchIfEmpty.java",
                        "lineNumber": 67,
                        "className": "reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "onNext",
                        "fileName": "FluxMapFuseable.java",
                        "lineNumber": 121,
                        "className": "reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "run",
                        "fileName": "FluxSubscribeOnCallable.java",
                        "lineNumber": 249,
                        "className": "reactor.core.publisher.FluxSubscribeOnCallable$CallableSubscribeOnSubscription",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "call",
                        "fileName": "SchedulerTask.java",
                        "lineNumber": 68,
                        "className": "reactor.core.scheduler.SchedulerTask",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "call",
                        "fileName": "SchedulerTask.java",
                        "lineNumber": 28,
                        "className": "reactor.core.scheduler.SchedulerTask",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "run",
                        "fileName": "FutureTask.java",
                        "lineNumber": 266,
                        "className": "java.util.concurrent.FutureTask",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "access$201",
                        "fileName": "ScheduledThreadPoolExecutor.java",
                        "lineNumber": 180,
                        "className": "java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "run",
                        "fileName": "ScheduledThreadPoolExecutor.java",
                        "lineNumber": 293,
                        "className": "java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "runWorker",
                        "fileName": "ThreadPoolExecutor.java",
                        "lineNumber": 1149,
                        "className": "java.util.concurrent.ThreadPoolExecutor",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "run",
                        "fileName": "ThreadPoolExecutor.java",
                        "lineNumber": 624,
                        "className": "java.util.concurrent.ThreadPoolExecutor$Worker",
                        "nativeMethod": false
                    },
                    {
                        "methodName": "run",
                        "fileName": "Thread.java",
                        "lineNumber": 748,
                        "className": "java.lang.Thread",
                        "nativeMethod": false
                    }
                ],
                "message": "\nError has been observed at the following site(s):\n\t|_ checkpoint ⇢ org.apache.shenyu.web.configuration.ErrorHandlerConfiguration$1 [DefaultWebFilterChain]\n\t|_ checkpoint ⇢ org.apache.shenyu.web.filter.FallbackFilter [DefaultWebFilterChain]\n\t|_ checkpoint ⇢ org.apache.shenyu.web.filter.FileSizeFilter [DefaultWebFilterChain]\n\t|_ checkpoint ⇢ org.apache.shenyu.bootstrap.filter.HealthFilter [DefaultWebFilterChain]\n\t|_ checkpoint ⇢ org.apache.shenyu.web.filter.CrossFilter [DefaultWebFilterChain]\n\t|_ checkpoint ⇢ org.springframework.security.web.server.authorization.AuthorizationWebFilter [DefaultWebFilterChain]\n\t|_ checkpoint ⇢ org.springframework.security.web.server.authorization.ExceptionTranslationWebFilter [DefaultWebFilterChain]\n\t|_ checkpoint ⇢ org.springframework.security.web.server.authentication.logout.LogoutWebFilter [DefaultWebFilterChain]\n\t|_ checkpoint ⇢ org.springframework.security.web.server.savedrequest.ServerRequestCacheWebFilter [DefaultWebFilterChain]\n\t|_ checkpoint ⇢ org.springframework.security.web.server.context.SecurityContextServerWebExchangeWebFilter [DefaultWebFilterChain]\n\t|_ checkpoint ⇢ org.springframework.security.web.server.context.ReactorContextWebFilter [DefaultWebFilterChain]\n\t|_ checkpoint ⇢ org.springframework.security.web.server.header.HttpHeaderWriterWebFilter [DefaultWebFilterChain]\n\t|_ checkpoint ⇢ org.springframework.security.config.web.server.ServerHttpSecurity$ServerWebExchangeReactorContextWebFilter [DefaultWebFilterChain]\n\t|_ checkpoint ⇢ org.springframework.security.web.server.WebFilterChainProxy [DefaultWebFilterChain]\n\t|_ checkpoint ⇢ org.apache.shenyu.web.filter.LocalDispatcherFilter [DefaultWebFilterChain]\n\t|_ checkpoint ⇢ org.springframework.boot.actuate.metrics.web.reactive.server.MetricsWebFilter [DefaultWebFilterChain]\n\t|_ checkpoint ⇢ HTTP POST \"/http/test/waf/pass\" [ExceptionHandlingWebHandler]\nStack trace:",
                "localizedMessage": "\nError has been observed at the following site(s):\n\t|_ checkpoint ⇢ org.apache.shenyu.web.configuration.ErrorHandlerConfiguration$1 [DefaultWebFilterChain]\n\t|_ checkpoint ⇢ org.apache.shenyu.web.filter.FallbackFilter [DefaultWebFilterChain]\n\t|_ checkpoint ⇢ org.apache.shenyu.web.filter.FileSizeFilter [DefaultWebFilterChain]\n\t|_ checkpoint ⇢ org.apache.shenyu.bootstrap.filter.HealthFilter [DefaultWebFilterChain]\n\t|_ checkpoint ⇢ org.apache.shenyu.web.filter.CrossFilter [DefaultWebFilterChain]\n\t|_ checkpoint ⇢ org.springframework.security.web.server.authorization.AuthorizationWebFilter [DefaultWebFilterChain]\n\t|_ checkpoint ⇢ org.springframework.security.web.server.authorization.ExceptionTranslationWebFilter [DefaultWebFilterChain]\n\t|_ checkpoint ⇢ org.springframework.security.web.server.authentication.logout.LogoutWebFilter [DefaultWebFilterChain]\n\t|_ checkpoint ⇢ org.springframework.security.web.server.savedrequest.ServerRequestCacheWebFilter [DefaultWebFilterChain]\n\t|_ checkpoint ⇢ org.springframework.security.web.server.context.SecurityContextServerWebExchangeWebFilter [DefaultWebFilterChain]\n\t|_ checkpoint ⇢ org.springframework.security.web.server.context.ReactorContextWebFilter [DefaultWebFilterChain]\n\t|_ checkpoint ⇢ org.springframework.security.web.server.header.HttpHeaderWriterWebFilter [DefaultWebFilterChain]\n\t|_ checkpoint ⇢ org.springframework.security.config.web.server.ServerHttpSecurity$ServerWebExchangeReactorContextWebFilter [DefaultWebFilterChain]\n\t|_ checkpoint ⇢ org.springframework.security.web.server.WebFilterChainProxy [DefaultWebFilterChain]\n\t|_ checkpoint ⇢ org.apache.shenyu.web.filter.LocalDispatcherFilter [DefaultWebFilterChain]\n\t|_ checkpoint ⇢ org.springframework.boot.actuate.metrics.web.reactive.server.MetricsWebFilter [DefaultWebFilterChain]\n\t|_ checkpoint ⇢ HTTP POST \"/http/test/waf/pass\" [ExceptionHandlingWebHandler]\nStack trace:",
                "suppressed": []
            }
        ]
    }
}

Anything else?

I think this bug needs to be fixed on both frontend and backend.

JooKS-me commented 2 years ago

fixed in #2990 and #3028