自定义路由
首先提出一个疑问:比如说前端访问的时候必须要带某个参数过来,
比如必须要带某个token过来的话,不管放到头里也好,或者参数里也好。
否则认为这个访问就是违法的。
1、在网关中的过滤器类型filterType中总共有四种类型:①、pre(前置过滤器),②、post(后置过滤器),③、route(路由过滤器),④、error(错误过滤器)
1.1、既然做的是token的验证,是放到前置过滤器中的,代码如下:
1.2、在源代码FilterConstants这个类中有这四种类型的路由。 数字越小,优先级就越高。优先级一定要放置在最后一个前置路由器之前就可以了。官方推荐不是PRE_DECORATION_FILTER_ORDER把这个值改为多些,而是在这个值上进行加减法,一般做减法就行了。
1.3、减一代表在这个路由器之前执行,代码如下:
1.4、第三个方法:是否允许路由,去监控它true,代表一定要监控得
1.5、第四个方法 run:核心方法,思路如下:
①、我们需要从参数里面去拿到这个token得值,如果传了,就是合法得正常得请求得地址。
②、如果没传,就是不合法的请求
1.6、CookieUtil的代码如下:
1.7、交给Spring容器去管理。
1.8、然后把配置中心config启动起来,和服务网关启动,不带token的去访问:前置过滤器的成功了:只要没有token的访问都属于不正常的访问。
1.9、如果想通过的话,加上cookie就可以了:
2、还有后置路由器:比如当它有结果返回出来的时候,我想要在头里面加点头的信息。然后给它做返回,那么我们如何去写呢?
2.1、当请求处理完,当响应结果之前的过滤器就称之为后置过滤器。
比如在token验证以后将返回的结果的响应的头里面加点数据进去:比如加一个随机的token值给它返回出去或者UUID值。这个过滤器是在发送请求响应到响应头里的过滤器。
2.3、在源代码中,SEND_RESPONSE_FILTER_ORDER这个值是最大值,后置过滤器需要在它之前执行,所以减一。
2.4、重启下user-api-gateway:这个POST得意思只是后置得过滤器,不管什么类型得请求,这个请求头得信息都是有X-UUID得,这个和POST请求是没有关系的。
总结:在zuul中可以做很多的事情,特别在做鉴权上用的很多,权限校验,可以做一个token得判断,权限得校验也可以在zuul里面去写。