Zuul网关ZuulFilter拦截器

前言

该博客续写于 SpringCloud整合Zuul网关,使用ZuulFilter拦截器来拦截接口请求。

ZuulFilter

TokenFilter:

package com.baba.wlb.filter;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
/**
 * @Author wulongbo
 * @Date 2021/1/28 14:19
 * @Version 1.0
 */
// 网关过滤器
@Component
public class TokenFilter extends ZuulFilter {
    // 过滤器类型
 /**
 * pre表示在请求前执行
 *
 * @return
 */
 @Override
 public String filterType() {
        return "pre";
 }
    // 过滤器执行顺序,当一个请求在同一个阶段存在多个过滤器的时候,过个过滤器执行顺序
 @Override
 public int filterOrder() {
        return 0;
 }
    // 判断过滤器是否生效
 @Override
 public boolean shouldFilter() {
        return true;
 }
    // 编写过滤器拦截业务逻辑代码
 @Override
 public Object run() throws ZuulException {
        // 案例:拦截所有的服务接口,判断服务接口上是否有传递userToken
 // 1.获取上下文
 RequestContext currentContext = RequestContext.getCurrentContext();
 // 2.获取Request对象
 HttpServletRequest request = currentContext.getRequest();
 // 3.获取token 的时候从请求头中获取
//        String tenantId = request.getHeader("tenantId");
 String userToken = request.getParameter("userToken");
 if (StringUtils.isBlank(userToken)) {
            // 不会继续执行,不会去调用服务接口,网关服务直接响应给客户端
 currentContext.setSendZuulResponse(false);
 currentContext.setResponseBody("userToken is null");
 currentContext.setResponseStatusCode(401);
 }
        // 正常执行,调用其他服务接口
 return null;
 }
}

Zuul网关ZuulFilter拦截器_第1张图片
重启网关,后访问:http://localhost/api-order/getOrderByMember?name=iswulongbo
Zuul网关ZuulFilter拦截器_第2张图片
带上userToken后:http://localhost/api-order/getOrderByMember?name=iswulongbo&userToken=aapid
Zuul网关ZuulFilter拦截器_第3张图片
访问成功!

你可能感兴趣的:(javaspringboot)