【Java】Zuul网关ZuulFilter拦截器
Zuul网关ZuulFilter拦截器
isWulongbo发布于 今天 06:52
前言
该博客续写于 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
访问成功!
javaspringboot
阅读 33发布于 今天 06:52
本作品系原创,采用《署名-非商业性使用-禁止演绎 4.0 国际》许可协议
isWulongbo
在人生的头三十年,你培养习惯,后三十年,习惯铸就你
178 声望
8 粉丝
isWulongbo
在人生的头三十年,你培养习惯,后三十年,习惯铸就你
178 声望
8 粉丝
宣传栏
目录
前言
该博客续写于 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
访问成功!
以上是 【Java】Zuul网关ZuulFilter拦截器 的全部内容, 来源链接: utcz.com/a/109744.html
得票时间