每日笔记8.21

本文介绍了如何在SpringCloudGateway中使用GatewayFilter和GlobalFilter,如AddRequestParameter用于添加请求参数,以及如何在控制器层处理来自Gateway的参数。同时,详细展示了GlobalFilter如何验证URL上的参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值