目录
2、重启gateway服务,并在userController中添加请求头参数
- gateway
- zuul
Zuul是基于Servlet的实现,属于阻塞式编程。
而SpringCloudGateway则是基于Spring5中提供的WebFlux,属于响应式编程的实现,具备更好的性能。
- 对用户请求做身份认证、权限校验
- 将用户请求路由到微服务,并实现负载均衡
- 对用户请求做限流

- <dependency>
- <groupId>org.springframework.cloud</groupId>
- <artifactId>spring-cloud-starter-gateway</artifactId>
- </dependency>
- <dependency>
- <groupId>com.alibaba.cloud</groupId>
- <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
- </dependency>


- server:
- port: 10010
- spring:
- application:
- name: gateway
- cloud:
- nacos:
- server-addr: localhost:8848 #nacos地址
- gateway:
- routes:
- - id: user-service #路由标识(唯一)
- uri: lb://userservice #目标路由的地址
- predicates: #路由断言
- - Path=/user/** #判断路径
- - id: order-service
- uri: lb://orderservice
- predicates:
- - Path=/order/**




当路由规则不符合时,会出现404的错误!

路由过滤器工厂同样有30多个,这里是具体实现方法。

- filters:
- - AddRequestHeader=Truth,Itcast is freaking aowsome!

说明请求头添加成功了

这只是配置单个路由的过滤器,若要添加所有路由过滤器,进行以下步骤

发现请求头添加成功,也就是过滤器添加成功


- @Order(-1) //参数是指过滤器的优先级,值越低,优先级越高
- @Component
- public class AuthorizeFileter implements GlobalFilter {
- @Override
- public Mono
filter(ServerWebExchange exchange, GatewayFilterChain chain) { - // 1.获取请求参数
- ServerHttpRequest request = exchange.getRequest();
- MultiValueMap
params = request.getQueryParams(); - // 2.获取参数中的authorization参数
- String authorization = params.getFirst("authorization");
- // 3.判断参数值是否等于admin
- if ("admin".equals(authorization)){
- // 4.是则放行
- return chain.filter(exchange);
- }
- else {
- // 5.否则拦截
- // 5.1设置状态码
- exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
- // 5.2拦截请求
- return exchange.getResponse().setComplete();
- }
- }
- }




在gateway的yml文件中加上,网站记得改
- globalcors: # 全局的跨域处理
- add-to-simple-url-handler-mapping: true # 解决options请求被拦截问题
- corsConfigurations:
- '[/**]':
- allowedOrigins: # 允许哪些网站的跨域请求
- - "http://localhost:8090"
- - "http://www.leyou.com"
- allowedMethods: # 允许的跨域ajax的请求方式
- - "GET"
- - "POST"
- - "DELETE"
- - "PUT"
- - "OPTIONS"
- allowedHeaders: "*" # 允许在请求中携带的头信息
- allowCredentials: true # 是否允许携带cookie
- maxAge: 360000 # 这次跨域检测的有效期