spring cloud zuul过滤器修改requestURI 忽略大小写
通过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 忽略大小写的更多相关文章
- Spring Cloud Zuul 限流详解(附源码)(转)
在高并发的应用中,限流往往是一个绕不开的话题.本文详细探讨在Spring Cloud中如何实现限流. 在 Zuul 上实现限流是个不错的选择,只需要编写一个过滤器就可以了,关键在于如何实现限流的算法. ...
- Spring Cloud(十二):Spring Cloud Zuul 限流详解(附源码)(转)
前面已经介绍了很多zuul的功能,本篇继续介绍它的另一大功能.在高并发的应用中,限流往往是一个绕不开的话题.本文详细探讨在Spring Cloud中如何实现限流. 在 Zuul 上实现限流是个不错的选 ...
- Spring Cloud Zuul记录接口响应数据
系统在生产环境出现问题时,排查问题最好的方式就是查看日志了,日志的记录尽量详细,这样你才能快速定位问题. 如果需要在Zuul中进行详细的日志记录,这两种日志必不可少. API请求信息 API响应信息 ...
- Spring Cloud Zuul 中文文件上传乱码
原文地址:https://segmentfault.com/a/1190000011650034 1 描述 使用Spring Cloud Zuul进行路由转发时候吗,文件上传会造成中文乱码“?”.1. ...
- Spring Cloud Zuul 网关使用与 OAuth2.0 认证授权服务
API 网关的出现的原因是微服务架构的出现,不同的微服务一般会有不同的服务地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题: 客户端会 ...
- Spring Cloud Zuul API服务网关之请求路由
目录 一.Zuul 介绍 二.构建Spring Cloud Zuul网关 构建网关 请求路由 请求过滤 三.路由详解 一.Zuul 介绍 通过前几篇文章的介绍,我们了解了Spring Cloud ...
- Spring Cloud Zuul之ZuulFilter详解
简介 Spring Cloud Zuul网关在整个微服务体系中肩负对外开放接口.请求拦截.路由转发等作用,其核心处理则是ZuulFilter ZuulFilter部分源码 Zuul Filter全部继 ...
- Spring Cloud Zuul 添加 ZuulFilter
紧接着上篇随笔Spring Cloud Zuul写,添加过滤器,进行权限验证 1.添加过滤器 package com.dzpykj.filter; import java.io.IOException ...
- Spring Cloud Zuul网关 Filter、熔断、重试、高可用的使用方式。
时间过的很快,写springcloud(十):服务网关zuul初级篇还在半年前,现在已经是2018年了,我们继续探讨Zuul更高级的使用方式. 上篇文章主要介绍了Zuul网关使用模式,以及自动转发机制 ...
随机推荐
- 51 Nod 1678 lyk与gcd(容斥原理)
1678 lyk与gcd 基准时间限制:2 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 收藏 关注 这天,lyk又和gcd杠上了. 它拥有一个n个数的数列,它想实现两种操作 ...
- [THUSC2017]杜老师:bitset+线性基
算法一(50pts) 分析 有一个很显然的暴力做法,对于区间内的每个数开个bitset,然后暴力分解质因数.如果对于一个数,它的一个质因子的指数是奇数,那么就把bitset的对应位设成\(1\).答案 ...
- [CSP-S模拟测试]:异或(数学)
题目描述 给定$L,R$,我们希望你求出:$$\sum\limits_{i=L}^R\sum\limits_{j=L}^R(i\oplus j)$$其中这里的$\oplus$表示异或运算.答案对$10 ...
- Comparable接口与Comparator接口的比较————总结
之前的两篇文章主要学习了Comparable接口和Comparator接口的学习.既然已经学习完了,现在就趁热打铁,进行总结吧! Comparable接口和Comparator接口的共同点: 1. 都 ...
- 进程间通信(IPC)-管道、匿名管道
每个进程都有各自的地址空间,任何一个进程的全局变量在另一个进程中都看不到 所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读 ...
- sed将一个文件插入到另一个文件(合并两个文件)
将before.sh的内容插入到catalina.sh的第一行之后 sed -i '1r /srv/tomcat8/bin/before.sh' /srv/tomcat8/bin/catalina.s ...
- mysql命令使用2
mysql查询默认不区分大小写,如果需要区分大小写,使用binary mysql>select * from teacher where binary name='niu'; mysql查询默认 ...
- python使用内置方法和修饰器方法获取类名、函数名
1. 外部获取 从外部的情况好获取,可以使用指向函数的对象,然后用__name__属性. def a(): pass a.__name__ 或者 getattr(a,'__name__') 2. 内部 ...
- 常量const实践
这篇文章写的很好:https://www.cnblogs.com/zhangfeionline/p/5882790.html 自己是实践: 1. 定义时必须初始化值,不然如下错误: 2. 3. 使用:
- Fresnel integral菲涅尔积分的一丢丢探讨
起因源于导师的关于回旋曲线的一点问题 其中最后得到的曲率公式中的c,s’和s定义不明确 于是开始从头从(2.1)式中的积分入手探究 维基百科中Fresnel integral的S(x)与C(x)的定义 ...