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的时候

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM