# 常见问题

## 在zuul过滤器中获取请求参数

```java
ApiParam param = ZuulContext.getApiParam();
```

## 在SpringCloudGateway中获取请求参数

```java
ApiParam apiParam = ServerWebExchangeUtil.getApiParam(exchange);
```

## 微服务端如何获取appId等参数

```java
OpenContext openContext = ServiceContext.getCurrentContext().getOpenContext();
String appId = openContext.getAppId();
```

## 在其它地方获取业务参数

```java
OpenContext openContext = ServiceContext.getCurrentContext().getOpenContext();
Story bizObject = (Story)openContext.getBizObject();

或

OpenContext openContext = ServiceContext.getCurrentContext().getOpenContext();
Story bizObject = openContext.getBizObject(Story.class);
```

## 如何关闭签名验证

- 针对某一个接口关闭签名验证
`@ApiMapping(value = "alipay.story.get", ignoreValidate = true)`

- 针对所有接口关闭签名验证

```java
@Configuration
public class ZuulConfig extends AlipayZuulConfiguration {

    static {
        ...
        ApiConfig.getInstance().setIgnoreValidate(true);
        ...
    }

}
```

## 注册到eureka显示hostname，非ip

```properties
eureka.instance.prefer-ip-address=true
eureka.instance.instance-id=${spring.cloud.client.ip-address}:${server.port}
```

```xml
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-commons</artifactId>
</dependency>
```

参考：https://www.jianshu.com/p/5ad8317961b7

## 直接访问服务的swagger-ui.html ，提示access forbidden

找到微服务的`OpenServiceConfig.java`，重写内部类Swagger2中的swaggerAccessProtected()方法，返回false。线上请设置成true

```java
// 开启文档
@Configuration
@EnableSwagger2
public static class Swagger2 extends SwaggerSupport {
    @Override
    protected String getDocTitle() {
        return "故事API";
    }

    @Override
    protected boolean swaggerAccessProtected() {
        return false;
    }
}
```

## 调试网关出现服务不可用

打断点调试，网关出现Read Timeout

参考：https://blog.csdn.net/qq_36872046/article/details/81058045

yml添加：

```properties
# https://blog.csdn.net/qq_36872046/article/details/81058045
# 路由转发超时时间，毫秒，默认值1000，详见：RibbonClientConfiguration.DEFAULT_READ_TIMEOUT。
# 如果微服务端 处理时间过长，会导致ribbon read超时，解决办法将这个值调大一点
ribbon.ReadTimeout: 60000
```