关于java:Zuul网关ZuulFilter拦截器

51次阅读

共计 1439 个字符,预计需要花费 4 分钟才能阅读完成。

前言

该博客续写于 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;
 }
}


重启网关,后拜访:http://localhost/api-order/getOrderByMember?name=iswulongbo

带上 userToken 后:http://localhost/api-order/getOrderByMember?name=iswulongbo&userToken=aapid

拜访胜利!

正文完
 0