springcloud实战之12 路由网关拦截器

来源:互联网 发布:和女孩子网络聊天技巧 编辑:程序博客网 时间:2024/06/05 04:41

为了能够在api网关中实现对客户端请求的校验,我们将继续介绍spring cloud zuul的另外一个核心功能:请求过滤。zuul允许开发这在api-gateway网关上通过定义过滤器来实现对请求的核心拦截与过滤,实现的方法非常简单。

重构工程(springcloud-server-api-gateway)

新建过滤类

public class AccessFilter extends ZuulFilter {    private final Logger _logger = LoggerFactory.getLogger(this.getClass()) ;    @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() ;        _logger.info("send {} to {}",request.getMethod(),request.getRequestURL().toString());        Object token = request.getParameter("token") ;        if(null == token){            _logger.error("token is null ...");            ctx.setSendZuulResponse(false);            ctx.setResponseStatusCode(401);        }else{            _logger.info("access token is ok!!!");        }        return null;    }}

注册过滤器

@Configurationpublic class ApiGatewayConfig {    @Bean    public AccessFilter accessFilter(){        return new AccessFilter();    }}

调用效果图

调用原来的接口,

调用地址:http://localhost:8004/api-b/api/rest/getMessage

这里写图片描述

调用地址:http://localhost:8004/api-b/api/rest/getMessage?token=sss

这里写图片描述

源码

springcloud-server-eureka

springcloud-producer-rest

springcloud-consumer-feign

springcloud-consumer-ribbon

springcloud-server-api-gateway

历史文章

springcloud实战之1 技术选型:dubbo还是springcloud

springcloud实战之2 服务注册与发现(eureka实现)

springcloud实战之3 高可用服务注册中心(eureka集群)

springcloud实战之5 服务消费者(ribbon)

springcloud实战之6 服务消费者(Feign)

springcloud实战之7 断路器(Hystrix)

springcloud实战之8 断路器-仪表盘-单例监控(Hystrix)

springcloud实战之9断路器-集群监控(turbine)

springcloud实战之10 分布式配置中心(config)

springcloud实战之11路由网关(zuul)