共计 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
拜访胜利!
正文完