JavaEE:SpringCloud-使用Zuul网关提供统一请求入口

说明:

提供统一的请求入口,通过配置的微服务路径拦截信息,根据不同的路径跳转到不同的微服务。

一、导入SpringCloud与SpringBoot依赖包(必须版本对应,此处为2.2.x <-> Hoxton):

见此文章第一章:https://blog.csdn.net/a526001650a/article/details/106859559

二、配置Eureka的Client端和Zuul微服务网关拦截信息:

1.导入Eureka的Client端依赖包和Zuul依赖包:

<dependencies>
    <!-- 导入Eureka的Client端依赖包 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <!-- 导入Zuul依赖包 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
    </dependency>
</dependencies>

2.application.yml配置Eureka的Client端和Zuul网关信息:

spring:
  application:
    name: mall-gateway #配置本网关服务名称
server: #配置本网关端口号
  port: 9999

#配置Eureka的Client端
eureka:
  client:
    service-url: #配置Eureka Server端服务器的地址
      defaultZone: http://127.0.0.1:10000/eureka/
  instance: #配置跨域访问
    prefer-ip-adress: true
#配置Zuul网关信息
zuul:
  routes: #配置要拦截的微服务
    mall-usercenter: #mall-usercenter为自定义的微服务名称
      path: /** #配置mall-usercenter微服务要拦截的路径
      serviceId: mall-usercenter #配置该微服务在Eureka注册中心中的服务id

hystrix: #配置hystrix超时时间,可以不配使用默认值
  command:
    default:  #默认所有超时时间
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 6000 #6000毫秒
ribbon: #配置连接与读取超时时间,实际为(ConnectionTimeOut+ReadTimeOut)*2,要小于hystrix超时时间,可以不配使用默认值
  ConnectionTimeOut: 600
  ReadTimeOut: 2000

3.编写启动类(配置Eureka的Client端和Zuul):

@SpringBootApplication
@EnableEurekaClient //配置Eureka  Client端
@EnableZuulProxy //配置Zuul
public class ZuulApplication {
    public static void main(String[] args) {
        SpringApplication.run(ZuulApplication.class);
    }
}

4.在浏览器输入网关IP与端口,路径用拦截的服务地址,能直接访问:

#127.0.0.1:9999为网关地址,/getUserDetail/1001为mall-usercenter微服务的请求路径
http://127.0.0.1:9999/getUserDetail/1001

三、Zull过滤器,根据条件阻止访问网关内部的微服务(需要增加头字段转发,防止丢失):

1.创建自定义类继承ZuulFilter(@Component自动扫描加载,让过滤器生效):

@Component  //自动扫描加载,让过滤器生效
public class ZuulGatewayFilter extends ZuulFilter {
    @Override
    public String filterType() {
        return "pre";//返回pre表示之前过滤,返回post表示之后过滤
    }
    @Override
    public int filterOrder() {
        return 0; //多个过滤器时,数字越小的先执行
    }
    @Override
    public boolean shouldFilter() {
        return true;  //是否开启滤过器,true开启,false关闭
    }
    @Override
    public Object run() throws ZuulException {
        RequestContext context = RequestContext.getCurrentContext();
        HttpServletRequest request = context.getRequest();
        String headStr= request.getHeader("Authorization");
        if (true) { //条件,如果不满足则拦截,禁止访问网关内部的微服务
            //此句设为false进行拦截,设为true或不调用则放行
            context.setSendZuulResponse(false);
            context.getResponse().setContentType("application/json;charset=utf-8"); //返回为json格式
            context.setResponseBody("{code: 403, errorMsg: 请登录}"); //返回文本内容
            return null;
        }
        //转发头字段,防止网关拦截后丢失
        context.addZuulRequestHeader("Authorization", headStr);
        return null;
    }
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值