通过zuul网关处理requestURI可以做很多事情,如对uri的解密,转发,大小写转化等。

这里对URI做一个简单的大小写的转化。

写一个filter实现ZuulFilter:

package com.cis.mr.audit.config;

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper; import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.PRE_TYPE; /**
* @author :hkk
* @date :Created in 2019/7/11 9:45
*/ public class CaseInsenistiveFilter extends ZuulFilter {
@Override
public String filterType() {
return PRE_TYPE;
} @Override
public int filterOrder() {
return 4;
} @Override
public boolean shouldFilter() {
return true;
} @Override
public Object run() throws ZuulException {
RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest request = ctx.getRequest();
String requestURI = request.getRequestURI(); HttpServletRequestWrapper requestWrapper = new HttpServletRequestWrapper(request){
@Override
public String getRequestURI() {
return requestURI.toLowerCase();
}
}; ctx.setRequest(requestWrapper); return null;
}
}

注意这里有几点:

1. filterType是PRE_TYPE ,这是zuul定义的常量。可以通过FilterConstants查看。PRE_TYPE如下图,表示在处理转发请求之前的操作。

2. flterOrder是4,为什么是4,这里要了解zuul几个自带的filter。特别是PreDecorationFilter

下面是几个常用filter的order:

    /**
* Filter Order for {@link DebugFilter#filterOrder()}.
*/
public static final int DEBUG_FILTER_ORDER = 1; /**
* Filter Order for
* {@link org.springframework.cloud.netflix.zuul.filters.pre.FormBodyWrapperFilter#filterOrder()}.
*/
public static final int FORM_BODY_WRAPPER_FILTER_ORDER = -1; /**
* Filter Order for
* {@link org.springframework.cloud.netflix.zuul.filters.pre.PreDecorationFilter}.
*/
public static final int PRE_DECORATION_FILTER_ORDER = 5; /**
* Filter Order for
* {@link org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter#filterOrder()}.
*/
public static final int RIBBON_ROUTING_FILTER_ORDER = 10; /**
* Filter Order for
* {@link org.springframework.cloud.netflix.zuul.filters.post.SendErrorFilter#filterOrder()}.
*/
public static final int SEND_ERROR_FILTER_ORDER = 0; /**
* Filter Order for {@link SendForwardFilter#filterOrder()}.
*/
public static final int SEND_FORWARD_FILTER_ORDER = 500; /**
* Filter Order for
* {@link org.springframework.cloud.netflix.zuul.filters.post.SendResponseFilter#filterOrder()}.
*/
public static final int SEND_RESPONSE_FILTER_ORDER = 1000; /**
* Filter Order for
* {@link org.springframework.cloud.netflix.zuul.filters.route.SimpleHostRoutingFilter#filterOrder()}.
*/
public static final int SIMPLE_HOST_ROUTING_FILTER_ORDER = 100; /**
* filter order for {@link Servlet30WrapperFilter#filterOrder()}.
*/
public static final int SERVLET_30_WRAPPER_FILTER_ORDER = -2; /**
* filter order for
* {@link org.springframework.cloud.netflix.zuul.filters.pre.ServletDetectionFilter#filterOrder()}.
*/
public static final int SERVLET_DETECTION_FILTER_ORDER = -3;

可以看到PreDecorationFilter的order是5,在它之前的filter,我们设置一个getRequestURI的值,就可以实现需求,PreDecorationFilter是zuul很重要的过滤器,推荐大家仔细了解一下。

最后,我们注入这上fitler。

@Bean
public CaseInsenistiveFilter getCaseFilter() {
return new CaseInsenistiveFilter();
}

spring cloud zuul过滤器修改requestURI 忽略大小写的更多相关文章

  1. Spring Cloud Zuul 限流详解(附源码)(转)

    在高并发的应用中,限流往往是一个绕不开的话题.本文详细探讨在Spring Cloud中如何实现限流. 在 Zuul 上实现限流是个不错的选择,只需要编写一个过滤器就可以了,关键在于如何实现限流的算法. ...

  2. Spring Cloud(十二):Spring Cloud Zuul 限流详解(附源码)(转)

    前面已经介绍了很多zuul的功能,本篇继续介绍它的另一大功能.在高并发的应用中,限流往往是一个绕不开的话题.本文详细探讨在Spring Cloud中如何实现限流. 在 Zuul 上实现限流是个不错的选 ...

  3. Spring Cloud Zuul记录接口响应数据

    系统在生产环境出现问题时,排查问题最好的方式就是查看日志了,日志的记录尽量详细,这样你才能快速定位问题. 如果需要在Zuul中进行详细的日志记录,这两种日志必不可少. API请求信息 API响应信息 ...

  4. Spring Cloud Zuul 中文文件上传乱码

    原文地址:https://segmentfault.com/a/1190000011650034 1 描述 使用Spring Cloud Zuul进行路由转发时候吗,文件上传会造成中文乱码“?”.1. ...

  5. Spring Cloud Zuul 网关使用与 OAuth2.0 认证授权服务

    API 网关的出现的原因是微服务架构的出现,不同的微服务一般会有不同的服务地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题: 客户端会 ...

  6. Spring Cloud Zuul API服务网关之请求路由

    目录 一.Zuul 介绍 二.构建Spring Cloud Zuul网关 构建网关 请求路由 请求过滤 三.路由详解 一.Zuul 介绍 ​ 通过前几篇文章的介绍,我们了解了Spring Cloud ...

  7. Spring Cloud Zuul之ZuulFilter详解

    简介 Spring Cloud Zuul网关在整个微服务体系中肩负对外开放接口.请求拦截.路由转发等作用,其核心处理则是ZuulFilter ZuulFilter部分源码 Zuul Filter全部继 ...

  8. Spring Cloud Zuul 添加 ZuulFilter

    紧接着上篇随笔Spring Cloud Zuul写,添加过滤器,进行权限验证 1.添加过滤器 package com.dzpykj.filter; import java.io.IOException ...

  9. Spring Cloud Zuul网关 Filter、熔断、重试、高可用的使用方式。

    时间过的很快,写springcloud(十):服务网关zuul初级篇还在半年前,现在已经是2018年了,我们继续探讨Zuul更高级的使用方式. 上篇文章主要介绍了Zuul网关使用模式,以及自动转发机制 ...

随机推荐

  1. c# B/S下 如何优化文件上传速度和实现断点续传问题

    IE的自带下载功能中没有断点续传功能,要实现断点续传功能,需要用到HTTP协议中鲜为人知的几个响应头和请求头. 一. 两个必要响应头Accept-Ranges.ETag 客户端每次提交下载请求时,服务 ...

  2. sh_03_逻辑运算演练

    sh_03_逻辑运算演练 # 练习1: 定义一个整数变量 age,编写代码判断年龄是否正确 age = 12 # 要求人的年龄在 0-120 之间 """ 10000 a ...

  3. cvpr 2019 workshop&oral session

    1. Verification and Certification of Neural Networks神经网络的验证与认证 2. Automated Analysis of Marine Video ...

  4. Node.js 几个重启工程的工具

    pm2, forever, nodemon, supervisor 均可在 npm 查找相关资料和用法. 线上工程推荐 pm2 开发推荐 supervisor

  5. Window7下安装Eclipse C/C++ Developer

    觉得自己写这个是有点脑残的.哈哈. 毕业之后,看的多的是Java.大多忘记C和C++的东西.虽说大学第一门计算机语言就是学的C.惭愧. 重温一下C的知识. 正题: 1.在Windows下安装Eclip ...

  6. 在Java web模板的上进行编写

    要求: 链接:https://pan.baidu.com/s/15NdAt-aiv-X9sRbMSfXYXQ 提取码:7agw web模板: 链接:https://pan.baidu.com/s/1A ...

  7. [CSP-S模拟测试]:123567(莫比乌斯函数+杜教筛+数论分块)

    题目传送门(内部题92) 输入格式 一个整数$n$. 输出格式 一个答案$ans$. 样例 样例输入: 样例输出: 数据范围与提示 对于$20\%$的数据,$n\leqslant 10^6$. 对于$ ...

  8. [BZOJ1030]:[JSOI2007]文本生成器(AC自动机+DP)

    题目传送门 题目描述 JSOI交给队员ZYX一个任务,编制一个称之为“文本生成器”的电脑软件:该软件的使用者是一些低幼人群, 他们现在使用的是GW文本生成器v6版.该软件可以随机生成一些文章―――总是 ...

  9. 十九、RF接口测试汇总(一)

    搭建项目:转自  http://chuansong.me/n/1858477 A.请求方式为get请求 方式一:导入RequestsLibrary库,get request    [ alias | ...

  10. Git-Runoob:Git 工作区、暂存区和版本库

    ylbtech-Git-Runoob:Git 工作区.暂存区和版本库 1.返回顶部 1. Git 工作区.暂存区和版本库 基本概念 我们先来理解下Git 工作区.暂存区和版本库概念 工作区:就是你在电 ...