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

最新文章

  1. iOS8 关于预编译文件.pch的改变
  2. [kylin] 部署kylin服务
  3. JavaScript检测实例属性, 原型属性
  4. asp中将文本框内的日期转换成datetime类型的数据
  5. Android 自定义View修炼-【2014年最后的分享啦】Android实现自定义刮刮卡效果View
  6. QTableWidget中添加按钮
  7. 自定义绘制View
  8. BeanUtils数据封装与表单JavaBean
  9. static的加载先后顺序
  10. SQL查询操作及子句优先级
  11. 树链剖分( 洛谷P3384 )
  12. log4j警告:WARN Please initialize the log4j system properly 的解决方法
  13. 2.6 if嵌套
  14. Retrofit2
  15. mysql插入表数据中文乱码问题解决方案
  16. Celery + RabbitMq 示意图
  17. tomcat -&gt; 简介&amp;部署
  18. 【AtCoder】AGC026 题解
  19. mysql 建库建表建用户
  20. 第182天:HTML5——地理定位

热门文章

  1. 打开新窗口(window.open) open() 方法可以查找一个已经存在或者新建的浏览器窗口。 语法: window.open([URL], [窗口名称], [参数字符串])
  2. python全栈开发:hashlib加密
  3. JavaScript数组的2种定义方式
  4. Java 生成pdf表格文档
  5. MYSQL获取同时关注了某两个(或者N个)用户的用户
  6. python web 分页组件
  7. oracle中准确控制job的下次运行时间(next date)
  8. 如何正确使用 Flink Connector?
  9. Spring 社区的唯一一个国产开源项目 - Spring Cloud Alibaba 毕业了
  10. HZOI2019序列