微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

运行Spring Boot网关时出现“阻止”异常

如何解决运行Spring Boot网关时出现“阻止”异常

我对Spring云领域还很陌生,并且遇到了挑战。 我正在使用Spring云版本-Hoxton.SR6。我已经实现了带有阻塞负载均衡器的网关。 我正在使用一个简单的RestTemplate对我的一个微服务进行验证调用。目标微服务仅在签入db(postgresql)后返回一个String。总的来说,我正在尝试根据phoneNumber和JWT令牌来验证传入的呼叫。

例外

java.lang.IllegalStateException:block()/ blockFirst()/ blockLast()正在阻塞,线程反应器-http-nio-3不支持 在Reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:83)〜[reactor-core-3.3.8.RELEASE.jar:3.3.8.RELEASE] 禁止:reactor.core.publisher.FluxOnAssembly $ OnAssemblyException: 在以下站点发现了错误: | _检查点⇢org.springframework.cloud.gateway.filter.WeightCalculatorWebFilter [DefaultWebFilterChain] | _检查点⇢HTTP GET“ / manakarnika / user / 9823961697?userPwd = abc” [ExceptionHandlingWebHandler] 堆栈跟踪: 在Reactor.core.publisher.BlockingSingleSubscriber.blockingGet(BlockingSingleSubscriber.java:83)〜[reactor-core-3.3.8.RELEASE.jar:3.3.8.RELEASE] 在react..core.publisher.Mono.block(Mono.java:1680)〜[reactor-core-3.3.8.RELEASE.jar:3.3.8.RELEASE] 在com.whiztech.manakarnika.microservices.servicegateway.filter.Authorizefilter.filter(Authorizefilter.java:57)〜[classes /:na] 在org.springframework.cloud.gateway.handler.FilteringWebHandler $ GatewayFilteradapter.filter(FilteringWebHandler.java:138)〜[spring-cloud-gateway-core-2.2.3.RELEASE.jar:2.2.3.RELEASE] 在org.springframework.cloud.gateway.filter.OrderedGatewayFilter.filter(OrderedGatewayFilter.java:44)〜[spring-cloud-gateway-core-2.2.3.RELEASE.jar:2.2.3.RELEASE] 在org.springframework.cloud.gateway.handler.FilteringWebHandler $ DefaultGatewayFilterChain.lambda $ filter $ 0(FilteringWebHandler.java:118)〜[spring-cloud-gateway-core-2.2.3.RELEASE.jar:2.2.3.RELEASE] 在react..core.publisher.MonoDefer.subscribe(MonoDefer.java:44)〜[reactor-core-3.3.8.RELEASE.jar:3.3.8.RELEASE] 在Reactor.core.publisher.Mono.subscribe(Mono.java:4213)〜[reactor-core-3.3.8.RELEASE.jar:3.3.8.RELEASE] 在Reactor.core.publisher.MonoIgnoreThen $ ThenIgnoreMain.drain(MonoIgnoreThen.java:172)〜[reactor-core-3.3.8.RELEASE.jar:3.3.8.RELEASE] 在Reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:56)〜[reactor-core-3.3.8.RELEASE.jar:3.3.8.RELEASE] 在Reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64)〜[reactor-core-3.3.8.RELEASE.jar:3.3.8.RELEASE] 在Reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)〜[reactor-core-3.3.8.RELEASE.jar:3.3.8.RELEASE] 在Reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)〜[reactor-core-3.3.8.RELEASE.jar:3.3.8.RELEASE] 在Reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64)〜[reactor-core-3.3.8.RELEASE.jar:3.3.8.RELEASE] 在Reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)〜[reactor-core-3.3.8.RELEASE.jar:3.3.8.RELEASE] 在Reactor.core.publisher.Mono.subscribe(Mono.java:4213)〜[reactor-core-3.3.8.RELEASE.jar:3.3.8.RELEASE] 在Reactor.core.publisher.MonoIgnoreThen $ ThenIgnoreMain.drain(MonoIgnoreThen.java:172)〜[reactor-core-3.3.8.RELEASE.jar:3.3.8.RELEASE] 在Reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:56)〜[reactor-core-3.3.8.RELEASE.jar:3.3.8.RELEASE] 在Reactor.core.publisher.MonoFlatMap $ FlatMapMain.onNext(MonoFlatMap.java:150)〜[reactor-core-3.3.8.RELEASE.jar:3.3.8.RELEASE] 在react..core.publisher.FluxSwitchIfEmpty $ SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:67)〜[reactor-core-3.3.8.RELEASE.jar:3.3.8.RELEASE] 在Reactor.core.publisher.MonoNext $ NextSubscriber.onNext(MonoNext.java:76)〜[reactor-core-3.3.8.RELEASE.jar:3.3.8.RELEASE] 在react..core.publisher.FluxConcatMap $ ConcatMapImmediate.innerNext(FluxConcatMap.java:274)〜[reactor-core-3.3.8.RELEASE.jar:3.3.8.RELEASE] 在react..core.publisher.FluxConcatMap $ ConcatMapInner.onNext(FluxConcatMap.java:851)〜[reactor-core-3.3.8.RELEASE.jar:3.3.8.RELEASE] 在Reactor.core.publisher.FluxMap $ MapSubscriber.onNext(FluxMap.java:114)〜[reactor-core-3.3.8.RELEASE.jar:3.3.8.RELEASE] 在react..core.publisher.FluxSwitchIfEmpty $ SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:67)〜[reactor-core-3.3.8.RELEASE.jar:3.3.8.RELEASE] 在reactor.core.publisher.Operators $ MonoSubscriber.complete(Operators.java:1782)〜[reactor-core-3.3.8.RELEASE.jar:3.3.8.RELEASE]

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-loadbalancer</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>

过滤器

@Override
public Mono<Void> filter(ServerWebExchange exchange,GatewayFilterChain chain) {

    String phoneNumber = exchange.getRequest().getHeaders().getFirst(AUTHORIZE_USER);
    String token = exchange.getRequest().getHeaders().getFirst(AUTHORIZE_TOKEN);
    if (StringUtils.isBlank(token)) {
        exchange.getResponse().setStatusCode(HttpStatus.FORBIDDEN);
        return exchange.getResponse().setComplete();
    } else {

        HttpHeaders headers = new HttpHeaders();
        headers.set("Accept",MediaType.APPLICATION_JSON_VALUE);

        Map<String,String> param = new HashMap<String,String>();
        param.put("user",phoneNumber);
        param.put("token",token);

        
        /*
         * String response =
         * webClient.baseUrl(VALIDATE_TOKEN_URL).build().get().uri("validatetoken").
         * attribute("user",phoneNumber).attribute("token",token)
         * .accept(MediaType.APPLICATION_JSON).retrieve().bodyToMono(String.class).block
         * ();
         */
            
          String response = null; 
          try { 
              response = restTemplate.getForObject(VALIDATE_TOKEN_URL,String.class,param); 
              } 
          catch (RestClientException e) { e.printstacktrace(); } 
         

        if (!"true".equalsIgnoreCase(response.toString())) {
            exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
            return exchange.getResponse().setComplete();
        }
    }
    return chain.filter(exchange);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。