【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;

}

}

【Java】Zuul网关ZuulFilter拦截器
重启网关,后访问:http://localhost/api-order/getOrderByMember?name=iswulongbo
【Java】Zuul网关ZuulFilter拦截器
带上userToken后:http://localhost/api-order/getOrderByMember?name=iswulongbo&userToken=aapid
【Java】Zuul网关ZuulFilter拦截器
访问成功!

javaspringboot

阅读 33发布于 今天 06:52

本作品系原创,采用《署名-非商业性使用-禁止演绎 4.0 国际》许可协议


wulongbo

我的专栏

avatar

isWulongbo

在人生的头三十年,你培养习惯,后三十年,习惯铸就你

178 声望

8 粉丝

0 条评论

得票时间

avatar

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;

}

}

【Java】Zuul网关ZuulFilter拦截器
重启网关,后访问:http://localhost/api-order/getOrderByMember?name=iswulongbo
【Java】Zuul网关ZuulFilter拦截器
带上userToken后:http://localhost/api-order/getOrderByMember?name=iswulongbo&userToken=aapid
【Java】Zuul网关ZuulFilter拦截器
访问成功!

以上是 【Java】Zuul网关ZuulFilter拦截器 的全部内容, 来源链接: utcz.com/a/109744.html

回到顶部