前言

该博客续写于 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 */// 网关过滤器@Componentpublic 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

拜访胜利!