码迷,mamicode.com
首页 > 其他好文 > 详细

TZ_14_Zuul网关_过滤器

时间:2019-09-07 20:49:01      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:void   app   and   service   iat   dap   start   xtend   去除   

1.Zuul作为网关的其中一个重要功能,就是实现请求的鉴权。而这个动作我们往往是通过Zuul提供的过滤器来实现的。

2.自定义过滤器实现用户登陆时需要携带一个Key才可以登陆,否则返回403

  

  1>zuul启动坐标

    <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
            <version>2.0.0.RELEASE</version>
        </dependency>

 

   2.>启动器类中需要加上@EnableZuulProxy

@SpringCloudApplication
@EnableZuulProxy
public class Zull {
    public static void main(String[] args) {
        SpringApplication.run(Zull.class);
    }
}

 

  

   3.>创建一个过滤器需要继承ZuulFilter类 并实现4个方法

  • shouldFilter:返回一个Boolean值,判断该过滤器是否需要执行。返回true执行,返回false不执行。

  • run:过滤器的具体业务逻辑。

  • filterType:返回字符串,代表过滤器的类型。包含以下4种:

    • pre:请求在被路由之前执行

    • routing:在路由请求时调用

    • post:在routing和errror过滤器之后调用

    • error:处理请求时发生错误调用

  • filterOrder:通过返回的int值来定义过滤器的执行顺序,数字越小优先级越高

/**
 * 需求完成在访问时  判断用户是否登陆
 */
@Component
public class CustomFilter extends ZuulFilter {
    @Override
    //过滤器的类型
    public String filterType() {
        return FilterConstants.PRE_TYPE;
    }

    @Override
    //过滤器的级别
    public int filterOrder() {
        return FilterConstants.PRE_DECORATION_FILTER_ORDER - 1;
    }

    @Override
    //是否开启过滤
    public boolean shouldFilter() {
        return true;
    }

    @Override
    //具体业务
    public Object run() throws ZuulException {
        //获取request
        RequestContext currentContext = RequestContext.getCurrentContext();
        HttpServletRequest request = currentContext.getRequest();
        //获得参数
        String token = request.getParameter("token");
       //判断是否存在
        /*if(token!=null && token.trim().isEmpty()){}*/

        if (StringUtils.isBlank(token)){
            //不存在 未登录  则拦截
            currentContext.setSendZuulResponse(false);
            //返回403权限不足
            currentContext.setResponseStatusCode(HttpStatus.FORBIDDEN.value());

        }

        return null;
    }
}

 

  

Zuul的applciation.yaml配置

server:
  port: 10010
zuul:
  routes:
    user-service:
      path: /User/**
      serviceId: user-service
      strip-prefix: false

     #去除不想要的路由地址
  ignored-services:

#从eureka拉取服务
eureka:
  client:
    service-url:
        defaultZone: http://127.0.0.1:10087/eureka/

#实现熔断器 Zuul自动配置
hystrix:
  command:
      default:
        execution:
          isolation:
            thread:
             # 熔断超时时长:6000ms
              timeoutInMillisecond: 6000

#实现负载均衡 Zuul自动配置
ribbon:
  ConnectionTimeout: 500
  ReadTimeout:2000

 

TZ_14_Zuul网关_过滤器

标签:void   app   and   service   iat   dap   start   xtend   去除   

原文地址:https://www.cnblogs.com/asndxj/p/11482916.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!