前言
该博客续写于 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
访问成功!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。