Spring Cloud之ZuulFilter拦截请求参数

本文详细介绍如何在SpringCloud中利用Zuul的过滤器功能实现请求参数的拦截与验证,特别是对userToken参数的检查流程,确保微服务的安全调用。

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

Spring Cloud之ZuulFilter拦截请求参数

过滤器放到网关:

 

 

package com.toov5.filter;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Component;

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;

@Component
public class TokenFilter extends ZuulFilter {

    public boolean shouldFilter() {   //判断过滤器是否生效
        // TODO Auto-generated method stub
        return true;
    }

    public Object run() throws ZuulException {  //编写顾虑器拦截业务逻辑代码
        // 案例:拦截所有都服务接口,判断服务接口上是否有传递userToekn参数
        //获取上下文
        RequestContext currentContext = RequestContext.getCurrentContext();
        //获取request对象
        HttpServletRequest request = currentContext.getRequest();
        //验证token时候 token的参数 从请求头获取
      String userToken = request.getParameter("userToken");
      if (StringUtils.isEmpty(userToken)) {
        //返回错误提示
          currentContext.setSendZuulResponse(false);  //false  不会继续往下执行 不会调用服务接口了 网关直接响应给客户了
          currentContext.setResponseBody("no no no  you have not userToken");
          currentContext.setResponseStatusCode(401);
          return null;
    }
       //否则正常执行 调用服务接口...        
       return null;
    }

    @Override
    public String filterType() {     //过滤器的类型
        // TODO Auto-generated method stub
        return "pre";   //表示在请求之前执行
    }  

    @Override 
    public int filterOrder() {  //过滤器执行的顺序 一个请求在同一个阶段存在多个过滤器时候,多个过滤器执行顺序问题 
        // TODO Auto-generated method stub
        return 0;
    }
   //网关的filter过滤器
}

重写的所有方法根据自己实际情况使用。

 

模拟有token的时候

 

Spring Cloud 提供了一种称为 Zuul 的网关服务,它可以用于拦截和路由请求。Zuul 提供了一种简单的方式来创建和管理微服务的 API 网关。 在 Spring Cloud 中,你可以通过创建一个 Zuul 过滤器来实现拦截器的功能。Zuul 过滤器可以在请求被发送到目标微服务之前或之后对请求进行处理。 要创建一个 Zuul 过滤器,你可以继承 `ZuulFilter` 类,并实现其中的抽象方法。常用的方法包括: - `shouldFilter()`:确定该过滤器是否需要执行。 - `run()`:定义过滤器的逻辑。 - `filterType()`:定义过滤器的类型,包括 "pre"(在请求被路由之前执行)、"route"(在路由请求时执行)和 "post"(在请求被路由后执行)。 - `filterOrder()`:定义过滤器的顺序,数值越小越先执行。 以下是一个简单的示例,展示了如何创建一个 Zuul 过滤器: ```java import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.RequestContext; public class MyFilter extends ZuulFilter { @Override public String filterType() { return "pre"; } @Override public int filterOrder() { return 1; } @Override public boolean shouldFilter() { return true; } @Override public Object run() { RequestContext ctx = RequestContext.getCurrentContext(); // 在此处编写你的过滤器逻辑 return null; } } ``` 通过以上示例,你可以创建一个自定义的 Zuul 过滤器,并在 `run()` 方法中编写你需要的拦截逻辑。请根据实际需求进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值