效果
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZwpmL0ATO2QTNxITM4IDMxkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
package com.cxp.shop_zuul.filter;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;
@Component
public class MyZuulFilter extends ZuulFilter {
@Autowired
ObjectMapper objectMapper; //spring 自带的json转换插件
@Override
public Object run() throws ZuulException {
System.out.println("******我开始拦截了*******");
RequestContext currentContext = RequestContext.getCurrentContext();//获取当前的 上下文对象
HttpServletRequest request = currentContext.getRequest();//获取 request
String requestURI = request.getRequestURI(); //获取请求的uri
if (requestURI.contains("/provide")){
System.out.println("有人访问了 uri:"+requestURI);
}
if (true){ //对其拦截
currentContext.setSendZuulResponse(false); //是否转发给对应路由的服务
// false则拦截
currentContext.setResponseStatusCode(401); //设置响应状态码
currentContext.getResponse().setContentType("application/json;charset=UTF-8");//设置响应编码格式
Map<String, Object> map = new HashMap<>();
map.put("success",false);
map.put("message","你被拦截了");
String msg=null;
try {
msg = objectMapper.writeValueAsString(map);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
currentContext.setResponseBody(msg); //设置响应内容
}else{
currentContext.setSendZuulResponse(true); //是否转发给对应路由的服务
}
return null;
}
@Override
public String filterType() {
return "pre";
} //可以在请求被路由之前调用 一共有4种类型参数
@Override
public int filterOrder() {
return 0;
} //数字越小优先级越高
@Override
public boolean shouldFilter() {
return true;
}
}
借鉴了2篇博客
https://blog.csdn.net/liuchuanhong1/article/details/62236793
https://blog.csdn.net/dfBeautifulLive/article/details/83148737