SpringCloud六:网关Zuul

绝地灬酷狼 2022-05-15 05:58 449阅读 0赞

SpringCloud的网关框架zuul和nginx的功能类似,除了具备服务路由、均衡负载功能之外,它还具备了权限控制等功能,为微服务架构提供了前门保护的作用,同时将权限控制这些较重的非业务逻辑内容迁移到服务路由层面,使得服务集群主体能够具备更高的可复用性和可测试性。
注册中心使用eureka,Eureka的文章如下
SpringCloud之Eureka服务注册中心,服务注册和服务发现
下面搭建zuul微服务
在pom.xml中引入依赖
springboot的版本为1.5.15
springcloud的版本为Edgware.SR4

  1. <dependency>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-starter-eureka</artifactId>
  4. </dependency>
  5. <dependency>
  6. <groupId>org.springframework.cloud</groupId>
  7. <artifactId>spring-cloud-starter-zuul</artifactId>
  8. </dependency>
  9. <dependency>
  10. <groupId>org.springframework.boot</groupId>
  11. <artifactId>spring-boot-starter-actuator</artifactId>
  12. </dependency>

在application.yml中配置zuul,把provider的微服务,加上前缀/provider,并忽略之前的访问url,并添加整体的url前缀/lhc

  1. eureka:
  2. client:
  3. serviceUrl:
  4. defaultZone: http://localhost:7001/eureka/
  5. server:
  6. port: 6001
  7. spring:
  8. application:
  9. name: zuul
  10. zuul:
  11. #url 前缀
  12. prefix: /lhc
  13. #忽略之前的url访问路径
  14. ignored-services: "*"
  15. routes:
  16. api-a:
  17. path: /provider/**
  18. serviceId: provider

在启动类中@EnableZuulProxy,搭建完毕

  1. @EnableEurekaClient @EnableZuulProxy @SpringBootApplication public class ZuulApplication { public static void main(String[] args) { SpringApplication.run(ZuulApplication.class, args); } }

zuul还可以添加所有微服务的过滤器,这个就可以用来使用基于JWT的安全权限认证,自定义zuulFilter如下

  1. @Component
  2. public class MyZuulFilter extends ZuulFilter {
  3. private static Logger log = LoggerFactory.getLogger(MyZuulFilter.class);
  4. @Override
  5. public String filterType() {
  6. return null;
  7. }
  8. @Override
  9. public int filterOrder() {
  10. return 0;
  11. }
  12. @Override
  13. public boolean shouldFilter() {
  14. return false;
  15. }
  16. @Override
  17. public Object run() throws ZuulException {
  18. RequestContext ctx = RequestContext.getCurrentContext();
  19. HttpServletRequest request = ctx.getRequest();
  20. log.info(String.format("%s >>> %s", request.getMethod(), request.getRequestURL().toString()));
  21. Object accessToken = request.getParameter("token");
  22. if(accessToken == null) {
  23. log.warn("token is empty");
  24. ctx.setSendZuulResponse(false);
  25. ctx.setResponseStatusCode(401);
  26. try {
  27. ctx.getResponse().getWriter().write("token is empty");
  28. }catch (Exception e){
  29. }
  30. return null;
  31. }
  32. log.info("ok");
  33. return null;
  34. }
  35. }

发表评论

表情:
评论列表 (有 0 条评论,449人围观)

还没有评论,来说两句吧...

相关阅读

    相关 SpringCloud-zuul

    网关的作用:就相当于整个微服务体系的入口,所有的外部请求都应该通过zuul进行处理,zuul会通过请求url分析应该将请求分发给哪个微服务处理,微服务处理完毕之后,会将结果返回

    相关 springcloud zuul

    网关可以对请求进行过滤拦截,转发等,这种跟过滤器不一样,它可以拦截入口,而不是单独一个服务。 业务场景,会员服务和订单服务,用户必须登录才能调用相关接口(即含有userTok

    相关 SpringCloud:Zuul

    SpringCloud的网关框架zuul和nginx的功能类似,除了具备服务路由、均衡负载功能之外,它还具备了权限控制等功能,为微服务架构提供了前门保护的作用,同时将权限控制这