2.引入依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-gatewayartifactId>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>
dependencies>
3.修改配置文件
server.port=9999
spring.application.name=service-gateway
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
debug=true
#使用服务发现路由,设置为true,gateway才可以发现调用其他的服务
spring.cloud.gateway.discovery.locator.enabled=true
#服务路由名小写
spring.cloud.gateway.discovery.locator.lower-case-service-id=true
#设置路由id
spring.cloud.gateway.routes[0].id=service-order
spring.cloud.gateway.routes[0].uri=lb://service-order
#设置路由断言,代理servicerId为auth-service的/auth/路径
spring.cloud.gateway.routes[0].predicates= Path=/orderservice/**
#配置service-edu服务
spring.cloud.gateway.routes[1].id=service-edu
spring.cloud.gateway.routes[1].uri=lb://service-edu
spring.cloud.gateway.routes[1].predicates= Path=/eduservice/**
server.port=9999
spring.application.name=service-gateway
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
debug=true
#使用服务发现路由,设置为true,gateway才可以发现调用其他的服务
spring.cloud.gateway.discovery.locator.enabled=true
#服务路由名小写
spring.cloud.gateway.discovery.locator.lower-case-service-id=true
#设置路由id
spring.cloud.gateway.routes[0].id=service-order
spring.cloud.gateway.routes[0].uri=lb://service-order
#设置路由断言,代理servicerId为auth-service的/auth/路径
# 只转发在指定时间之后的请求
#spring.cloud.gateway.routes[0].predicates=After=2020-07-04T19:16:43.338+08:00[Asia/Shanghai]
#当有多个断言可以使用这样的配置
# 只转发带有指定请求头的请求
spring.cloud.gateway.routes[0].predicates[0]= Header=Host
spring.cloud.gateway.routes[0].predicates[1]= After=2020-07-04T19:16:43.338+08:00[Asia/Shanghai]
spring.cloud.gateway.routes[0].predicates[2]= Path=/aaa/**
spring.cloud.gateway.routes[0].filters[0]= AddRequestHeader=Color, blue
spring.cloud.gateway.routes[0].filters[1]= AddResponseHeader=X-Request-red, blue
# 默认过滤器,会对所有的请求进行拦截
spring.cloud.gateway.default-filters[0]= AddResponseHeader=Meg, hello!
package com.zhw.gatewayservice.filter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.stereotype.Component;
import org.springframework.util.MultiValueMap;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
import java.util.List;
@Component
public class GlobalFilter implements org.springframework.cloud.gateway.filter.GlobalFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
//1.获取请求参数
ServerHttpRequest request = exchange.getRequest();
MultiValueMap<String, String> queryParams = request.getQueryParams();
//2.获取参数
String authorization = queryParams.getFirst("authorization");
//3.判断参数值是否等于admin
if ("admin".equals(authorization)){
//4.是放行
chain.filter(exchange);
}
//5.不是,拦截
//5.1 设置状态码,提示用户
ServerHttpResponse response = exchange.getResponse();
response.setStatusCode(HttpStatus.UNAUTHORIZED);
//5.2 完成拦截
return response.setComplete();
}
}
package com.zhw.gatewayservice.filter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.core.annotation.Order;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.stereotype.Component;
import org.springframework.util.MultiValueMap;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
import java.util.List;
@Order(-1) //定义过滤器的执行顺序,数值越小,越先执行
@Component
public class GlobalFilter implements org.springframework.cloud.gateway.filter.GlobalFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
//1.获取请求参数
ServerHttpRequest request = exchange.getRequest();
MultiValueMap<String, String> queryParams = request.getQueryParams();
//2.获取参数
String authorization = queryParams.getFirst("authorization");
//3.判断参数值是否等于admin
if ("admin".equals(authorization)){
//4.是放行
chain.filter(exchange);
}
//5.不是,拦截
//5.1 设置状态码,提示用户
ServerHttpResponse response = exchange.getResponse();
response.setStatusCode(HttpStatus.UNAUTHORIZED);
//5.2 完成拦截
return response.setComplete();
}
}
package com.zhw.gatewayservice.filter;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.stereotype.Component;
import org.springframework.util.MultiValueMap;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
import java.util.List;
@Component
public class MyGlobalFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
//1.获取请求参数
ServerHttpRequest request = exchange.getRequest();
MultiValueMap<String, String> queryParams = request.getQueryParams();
//2.获取参数
String authorization = queryParams.getFirst("authorization");
//3.判断参数值是否等于admin
if ("admin".equals(authorization)){
//4.是放行
chain.filter(exchange);
}
//5.不是,拦截
//5.1 设置状态码,提示用户
ServerHttpResponse response = exchange.getResponse();
response.setStatusCode(HttpStatus.UNAUTHORIZED);
//5.2 完成拦截
return response.setComplete();
}
@Override
public int getOrder() {
return -1;
}
}