效果

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