gateway的filters
1.GatewayFilter
eg:AddRequestParameter
在request中添加参数 - AddRequestParameter=address,beijing
address = bejing
cloud:
gateway:
routes: #配置路由,本质是list集合List<RouteDefinition> routes
- id: member_route01
uri: lb://member-service-provider
predicates: #断言
- Path=/member/get/**
filters:
- AddRequestParameter=address,beijing
对应的service微服务的controller层
String address = request.getParameter("address");
@GetMapping(value = "/member/get/{id}")
public Result getMemberById(@PathVariable("id") Long id, HttpServletRequest request) {
Member member = memberService.queryMemberById(id);
String address = request.getParameter("address");
log.info("查询结果= " + member);
if (member != null) {
return Result.success("查询成功 member-service-provider-10000"+" "+address, member);
} else {
return Result.error("402", "ID= " + id + " 不存在");
}
}
2.GlobalFilter
是一个接口,可以继承,GlobalFilter
处理url请求,比如
http://localhost:20000/member/get/1?user=zyz&pwd=123456
处理URL上参数user和pwd的验证,chain.filter(exchange)放行到下一个过滤器、getOrder(指定过滤器的优先级)方法、getQueryParams()获取所有参数、getFirst("user") 获取user对应值的第一个,也就是zyz
@Component
@Slf4j
public class CustomGatewayFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
//http://localhost:20000/member/get/1?user=zyz&pwd=123456
String user = exchange.getRequest().getQueryParams().getFirst("user");
String pwd = exchange.getRequest().getQueryParams().getFirst("pwd");
if (!("zyz".equals(user) && "123456".equals(pwd))){
log.info("非法用户");
//user和pwd不正确。返回
exchange.getResponse().setStatusCode(HttpStatus.NO_CONTENT);//设置返回状态码为不可接受
return exchange.getResponse().setComplete();
}
//放行到下一个
return chain.filter(exchange);
}
@Override
public int getOrder() {
return 0;
}
}