pom<dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> </dependencies>
configspring: application: name: gateway cloud: nacos: server-addr: localhost:80 gateway: routes: - id: user-service uri: lb://userservice # 路由的目标地址 predicates: - Path=/user/** # 判断路径是否是user开头 - id: order-service uri: lb://orderservice predicates: - Path=/order/** server: port: 10010
代码示例
configgateway: routes: - id: user-service uri: lb://userservice # 路由的目标地址 predicates: - Path=/user/** # 判断路径是否是user开头 - id: order-service uri: lb://orderservice predicates: - Path=/order/** filters: - AddRequestHeader=Truth,Hello world # 添加的过滤器
向所有微服务添加过滤器
默认过滤器
全局过滤器
编写代码自定义过滤逻辑
实现golabalFilter接口
案例:
javapackage cn.itcast.gateway;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.annotation.Order;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Component;
import org.springframework.util.MultiValueMap;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
@Order(-1) // 定义过滤器的顺序 默认最低 数字越小最先执行
@Component
public class AuthorizeFilter implements GlobalFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
// 1.获取请求参数
ServerHttpRequest request =exchange.getRequest();
MultiValueMap<String,String> params= request.getQueryParams();
// 2获取参数中的authorization
String auth = params.getFirst("authorization");
if ("admin".equals(auth)){
return chain.filter(exchange); // 放行
}
// 否 拦截
// 设置状态码
exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
// 拦截请求
return exchange.getResponse().setComplete();
//
}
}
过滤器执行顺序
1.当前路由过滤器
2.DefaultFilter
3.GlobalFilter
本文作者:钱小杰
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!