springcloud demo---zuul(api网关)

1.作用

请求路由。请求过滤。

通过使用Zuul来创建各种校验过滤器,然后指定哪些规则的请求需要执行校验逻辑,只有通过校验的才会被路由到具体的微服务接口,不然就返回错误提示

2.zuul-client

  2.1 配置文件

server:
port: 8766 #端口号
spring:
application:
name: service-zuul #服务注册中心测试名
zuul:
routes:
api-a:
path: /ribbon/**
serviceId: ribbon-provider #如果是/ribbon/**路径下的请求,则跳转到service-ribbon
api-b:
path: /feign/**
serviceId: feign-provider #如果是/feign/**路径下的请求,则跳转到service-feign
eureka:
client:
serviceUrl:
defaultZone: http://admin:123@localhost:8761/eureka/ #服务注册中心

  2.2 依赖和注解

    依赖:spring-cloud-starter-netflix-zuul; spring-cloud-starter-netflix-eureka-client

    注解:在启动类上增加注解:@EnableZuulProxy;@EnableEurekaClient

  2.3 通配符说明

    ?:匹配任意单个字符
    * :匹配任意数量的字符
    **:匹配任意数量的字符,并支持多级目录

  2.4 过滤类

    在启动类上增加过滤类:

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

    编写过滤类:AccessFilter

public class AccessFilter extends ZuulFilter {

private static Logger log = LoggerFactory.getLogger(AccessFilter.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();
log.info("send {} request to {}", request.getMethod(), request.getRequestURL().toString());
Object accessToken = request.getParameter("accessToken");
if (accessToken == null) {
log.warn("accessToken is empty");
ctx.setSendZuulResponse(false);
ctx.setResponseStatusCode(401);
try {
ctx.getResponse().getWriter().write("accessToken is empty");
} catch (Exception e) {
}
return null;
}
log.info("access is ok");
return null;
}
}

  2.5 过滤类说明

  • filterType: 过滤器的类型,它决定过滤器在请求的哪个生命周期中执行。这里定义为pre,代表会在请求被路由之前执行。
  • filterOrder: 过滤器的执行顺序。当请求在一个阶段中存在多个过滤器时,需要根据该方法返回的值来依次执行。
  • shouldFilter: 判断该过滤器是否需要被执行。这里我们直接返回了true,因此该过滤器对所有请求都会生效。实际运用中我们可以利用该函数来指定过滤器的有效范围。
  • run: 过滤器的具体逻辑。这里我们通过ctx.setSendZuulResponse(false)令zuul过滤该请求,不对其进行路由,然后通过ctx.setResponseStatusCode(401)设置了其返回的错误码,当然也可以进 一步优化我们的返回,比如,通过ctx.setResponseBody(body)对返回的body内容进行编辑等。

  2.6 访问地址

    访问http://localhost:8766/ribbon/test?accessToken=ribbon,跳转到ribbon服务的接口下。

转载于:https://www.cnblogs.com/rainsakura/p/10410738.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值