1.场景
例如:电影院系统分为会有服务,订单服务,只有登录后,才能访问其他服务,不然提示没有权限。所以,所有的模块都会增加一个参数token,而token常见的做法都是保存在request的头部。
package com.fqyd.filter;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import javax.servlet.http.HttpServletRequest;
/**
* Description:
* Author: wude
* Date: 2019/11/8 16:18
* Modified By:
*/
@Component
public class TokenFilter extends ZuulFilter {
@Override
public String filterType() {
return "pre";// 前置过滤器
}
@Override
public int filterOrder() {
return 0; //优先级为0,数字越大,优先级越低
}
@Override
public boolean shouldFilter() {
return true; //是否执行该过滤器,此处为true,说明需要过滤
}
@Override
public Object run() throws ZuulException {
//取到请求上下文
RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest request = ctx.getRequest();
String token = request.getHeader("token");
if(StringUtils.isEmpty(token)){
ctx.setSendZuulResponse(false);
ctx.setResponseBody("token is empty");
ctx.setResponseStatusCode(401);
}else{
ctx.setSendZuulResponse(true);
ctx.setResponseStatusCode(200);
ctx.setResponseBody("token succ");// 输出最终结果
}
return null;
}
}
2.测试