spring cloud 使用 Zuul实现过滤器
Zuul实现过滤器ZuulNetflix zuul作为API网关集成在spring cloud分布式集群中,是一个智能的应用服务器,对外暴露分布式中的请求调度和过滤,实现请求路由、负载均衡、与服务治理框架整合、请求转发的熔断机制和服务聚合等功能。过滤器类型:PRE:请求被路由之前被调用,身份验证ROUTING:将请求路由到微服务。POST:路由到微服务之后执行ERROR:在其
·
Zuul实现过滤器
Zuul
Netflix zuul作为API网关集成在spring cloud分布式集群中,是一个智能的应用服务器,对外暴露分布式中的请求调度和过滤,实现请求路由、负载均衡、与服务治理框架整合、请求转发的熔断机制和服务聚合等功能。
过滤器类型:
- PRE:请求被路由之前被调用,身份验证
- ROUTING:将请求路由到微服务。
- POST:路由到微服务之后执行
- ERROR:在其他阶段发生错误时执行。
编写zuul过滤器
public class LogFilter extends ZuulFilter { private static final Logger LOGGER = LogFilter.getLogger(PreRequestLogFilter.class); @Override public String filterType() { return "pre"; } @Override public int filterOrder() { return 0; } @Override public boolean shouldFilter() { return true; } @Override public Object run() { RequestContext ctx = RequestContext.getCurrentContext(); HttpServletRequest request = ctx.getRequest(); LogFilter.LOGGER.info(String.format("send %s request to %s", request.getMethod(), request.getRequestURL().toString())); return null; } }
zuul实现filter的方法:
- filterType:返回过滤器的类型:pre、route、post、error
- filterOrder:返回int值,来确定filter的执行顺序,不同的过滤器允许返回相同的数字
- shouldFilter:返回boolean确定filter是否执行
- run:过滤器执行内容
在启动类中注册过滤器
@Bean public LogFilter logFilter() { return new LogFilter(); }
禁用过滤器,在配置文件中添加:
zuul.<SimpleClassName>.<filterType>.disable = true
用户权限验证失败不进行路由:
@Override public Object run() { RequestContext ctx = RequestContext.getCurrentContext(); HttpServletRequest request = ctx.getRequest(); request.getMethod(), request.getRequestURL().toString())); String token = request.getHeader("token"); if (!ifRight(token)){ //认证失败 logger.error("token验证失败"); HttpServletResponse response = ctx.getResponse(); response.setCharacterEncoding("utf-8"); //设置字符集 response.setContentType("text/html; charset=utf-8"); //设置相应格式 response.setStatus(401); ctx.setSendZuulResponse(false); //不进行路由 try { response.getWriter().write("token 验证失败"); //响应体 } catch (IOException e) { loger.error("response io异常") e.printStackTrace(); } ctx.setResponse(response); return null; } logger.info("token验证成功"); return null; }
更多推荐
已为社区贡献1条内容
所有评论(0)