spring cloud 使用 Zuul实现过滤器
2018-01-24 09:08
435 查看
Zuul实现过滤器
ZuulNetflix 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; }
相关文章推荐
- Spring Cloud (十三) Zuul:静态路由、静态过滤器与动态路由的实现
- 使用Servlet过滤器实现用户登录验证
- 使用过滤器实现敏感词的过滤
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(18)-过滤器的使用和批量删除数据(伪删除和直接删除)
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(18)-过滤器的使用和批量删除数据(伪删除和直接删除)
- java中使用过滤器实现自动登录
- [struts]使用过滤器设置字符集实现中文数据的提交
- 使用过滤器实现网站访问计数器的功能
- 【Java EE 学习 19】【使用过滤器实现全站压缩】【使用ThreadLocal模式解决跨DAO事务回滚问题】
- javaweb-使用过滤器实现文本净化和字符转义
- 使用spring cloud实现分布式配置管理
- 综合使用spring cloud技术实现微服务应用
- jQuery使用contains过滤器实现精确匹配方法详解
- 使用Filter 过滤器实现禁用缓存
- spring security 2中使用通过自定义过滤器实现多登录页面
- 使用过滤器实现敏感词的过滤
- 使用过滤器Filter实现网页静态化
- java使用过滤器实现 请求转发
- 使用jsp过滤器实现登录权限
- 使用Web部件连接接口实现可以设置条件的过滤器