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