SpringCloud Zuul
package zwf;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
/**
* <p>路由、拦截应用</p>
* <p>从事信息技术行业,干着写代码的事,记录生活人生</p>
*
* @author ZengWenFeng
* @date 2021.09.13
* @mobile 13805029595
*/
@EnableZuulProxy
@EnableEurekaClient
@SpringBootApplication
public class AppZuul
{
//礼法、乐舞、射箭、御车、书法、数学(珠算)
//道德品行、音乐舞蹈、骑马射箭、驾驭战车、写字书法、算数方法
//中国古代已经把【礼】、【乐】放在首位了,这两项都是修理内心的
//【射】、【御】体育锻炼、国防
//【书】、【数】生活技能、以前的人写信、算术等谋生
//先贤【千年总结】没有【过时】,民族自豪感以及自信感,只是被历史遗忘、被文人曲解、只是被细化为领域、在生存【书】、【数】下来的基础下才能【礼】、【乐】、【射】、【御】
//人们难过悲伤的时候、愉快高兴的时候喜欢干嘛~ ~ ~music~ ~ ~
//我们只是在尖端机械制造、科技由于近代的自闭暂时落后~ ~ ~
//http://127.0.0.1:7101/ribbon/hello?name=ZengWenfeng&token=zwf005129
//http://127.0.0.1:7102/hello?name=ZengWenfeng
//http://127.0.0.1:7101/feign/hello?name=ZengWenfeng&token=zwf005129
//http://127.0.0.1:7103/hello?name=ZengWenfeng
//http://127.0.0.1:7104/hello?name=ZengWenfeng
//http://127.0.0.1:7105/hello?name=ZengWenfeng
//springboot 在2.4版本支持zuul 后面改了Gateway
public static void main(String[] args)
{
SpringApplication.run(AppZuul.class, args);
}
}
package zwf.filter;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
@Component
public class AccessFilter extends ZuulFilter
{
private static Logger log = LoggerFactory.getLogger(AccessFilter.class);
/*
* pre:路由之前
* routing:路由之时
* post: 路由之后
* error:发送错误调用
*
* @author ZengWenFeng
* @date 2025.08.12
* @email 117791303@qq.com
* @mobile 13805029595
*/
public String filterType()
{
return FilterConstants.PRE_TYPE;
}
/*
* 过滤的顺序
*
* @author ZengWenFeng
* @date 2025.08.12
* @email 117791303@qq.com
* @mobile 13805029595
*/
public int filterOrder()
{
return 0;
}
/*
* 逻辑判断,是否要过滤,永远过滤
*
* @author ZengWenFeng
* @date 2025.08.12
* @email 117791303@qq.com
* @mobile 13805029595
*/
public boolean shouldFilter()
{
return true;
}
/*
* 过滤器的具体逻辑
*
* @author ZengWenFeng
* @date 2025.08.12
* @email 117791303@qq.com
* @mobile 13805029595
*/
public Object run()
{
RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest request = ctx.getRequest();
log.info(String.format("%s >>> %s", request.getMethod(), request.getRequestURL().toString()));
Object accessToken = request.getParameter("token");
if (accessToken == null)
{
log.warn("token is empty");
ctx.setSendZuulResponse(false);
ctx.setResponseStatusCode(401);
try
{
ctx.getResponse().getWriter().write("token is empty");
}
catch (Exception e)
{
}
return null;
}
log.info("ok");
return null;
}
}
package zwf.filter;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;
import org.springframework.stereotype.Component;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
@Component
public class LoggerFilter extends ZuulFilter
{
/*
* pre:路由之前
* routing:路由之时
* post: 路由之后
* error:发送错误调用
*
* @author ZengWenFeng
* @date 2025.08.12
* @email 117791303@qq.com
* @mobile 13805029595
*/
public String filterType()
{
return FilterConstants.POST_TYPE;
}
/*
* 过滤的顺序
*
* @author ZengWenFeng
* @date 2025.08.12
* @email 117791303@qq.com
* @mobile 13805029595
*/
public int filterOrder()
{
return FilterConstants.SEND_RESPONSE_FILTER_ORDER - 1;
}
/*
* 逻辑判断,是否要过滤,永远过滤
*
* @author ZengWenFeng
* @date 2025.08.12
* @email 117791303@qq.com
* @mobile 13805029595
*/
public boolean shouldFilter()
{
return true;
}
/*
* 过滤器的具体逻辑
*
* @author ZengWenFeng
* @date 2025.08.12
* @email 117791303@qq.com
* @mobile 13805029595
*/
public Object run()
{
RequestContext context = RequestContext.getCurrentContext();
HttpServletRequest request = context.getRequest();
String method = request.getMethod();//氢气的类型,post get ..
String host = request.getRemoteHost();
Map<String, String[]> params = request.getParameterMap();
String paramsStr = params.toString();//请求的参数
long statrtTime = (long) context.get("startTime");//请求的开始时间
Throwable throwable = context.getThrowable();//请求的异常,如果有的话
String message = throwable.getMessage();
request.getRequestURI();//请求的uri
context.getResponseStatusCode();//请求的状态
long duration = System.currentTimeMillis() - statrtTime;//请求耗时
return null;
}
}