作用:外部只能通过网关来对接口尽心访问,网关的作用有路由转发,异常处理,过滤拦截
下面就是对pom文件的解读
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--gateway依赖webflux,所以在这里需要导入webflux-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<!--eureka必须要依赖hystrix文件-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<!--这是将gateway也作为了一个client端 所以才需要对其引入-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
其次是对application.yml文件的解读:
server:
port: 8080
spring:
application:
name: gateway
cloud:
gateway:
discovery:
locator:
enabled: true #表示是否与register结合。设置为true,通过serviceId大写来进行转发
logging:
level: #表示日志级别
org.springframework.cloud.gateway: trace
org.springframework.http.server.reactive: debug
org.springframework.web.reactive: debug
reactor.ipc.netty: debug
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:8082/eureka/
其次gateway的另外一个作用就是filter 其中它的服务拦截:具体代码如下:
/**
* 方法是对token进行校验,如果没有token就返回鉴权失败
* @param exchange
* @param chain
* @return
*/
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
String token = exchange.getRequest().getQueryParams().getFirst("token");
if(StringUtils.isBlank(token)){
ServerHttpResponse response = exchange.getResponse();
Map<String,Object> message = new HashMap<>();
message.put("status", -1);
message.put("data", "鉴权失败");
byte[] bytes = message.toString().getBytes(StandardCharsets.UTF_8);
DataBuffer buffer = response.bufferFactory().wrap(bytes);
response.setStatusCode(HttpStatus.UNAUTHORIZED);
response.getHeaders().add("Content-Type", "text/json;charset=UTF-8");
return response.writeWith(Mono.just(buffer));
}
return chain.filter(exchange);
}