通过zuul的过滤器 filter实现

//app 幂等过滤
@SuppressWarnings("all")
@Order(Ordered.HIGHEST_PRECEDENCE)
@WebFilter(filterName = "ValidAppIdempotent", urlPatterns = {
"/app/api/inbound/inboundEdit","/app/api/outbound/outboundEdit"
,"/app/api/inbound/inboundEdit_NonNote","/app/api/outbound/outboundEdit_NonNote"}
)
public class ValidAppIdempotent extends OncePerRequestFilter {
private static final Logger logger = LoggerFactory.getLogger(ValidToken.class);
public final static String ERROR_REPEATSUBMIT = "Repeated submission"; @Value("${appSign}")
private String appSign;
@Autowired
protected StringRedisTemplate idempotentTemplate; @Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
//获取 body 中post过来的数据
String contentType = request.getContentType();
if (StringUtils.isNotBlank(contentType) && contentType.indexOf(MediaType.APPLICATION_JSON.toString()) >= 0) {
request = new BodyReaderHttpServletRequestWrapper(request);
}
String data = null;
try {
data = NetUtil.getBodyString(request);
} catch (Exception e) {
e.printStackTrace();
}
//获取 url 中的数据
String sign = request.getParameter("sign");
String signMD5 = MD5.getSign(data, appSign);
if (Boolean.parseBoolean(idempotentTemplate.opsForValue().get(signMD5))) {
throw new ErrorSignException(ERROR_REPEATSUBMIT);
} else {
idempotentTemplate.opsForValue().set(signMD5, "true", ComContants.IDEMPOTENT_EXTIME, TimeUnit.SECONDS);
} filterChain.doFilter(request, response); }
}

测试:

@RequestMapping(value = "inboundEdit", method = RequestMethod.POST)
public ApiResult<String> inboundEdit(@RequestBody ApiRequest<String> request) {
ApiResult<String> r = new ApiResult<String>();
return r;
}

幂等 zuul的Filter实现的更多相关文章

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

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

  2. Zuul之Filter详解

    Zuul详解 官方文档:https://github.com/Netflix/zuul/wiki/How-it-Works Zuul的中心是一系列过滤器,能够在HTTP请求和响应的路由过程中执行一系列 ...

  3. spring-cloud-Zuul学习(三)【中级篇】--Filter链 工作原理与Zuul原生Filter【重新定义spring cloud实践】

    这里开始记录zuul中级进阶内容.前面说过了,zuul主要是一层一层的Filter过滤器组成,并且Zuul的逻辑引擎与Filter可用其他基于JVM的语言编写,比如:Groovy. 工作原理 Zuul ...

  4. zuul网关Filter处理流程及异常处理

    本文转载自:https://blog.csdn.net/tianyaleixiaowu/article/details/77893822 上一篇介绍了java网关Zuul的简单使用,进行请求路由转发和 ...

  5. Spring Cloud(十一):Spring Cloud Zuul网关 Filter、熔断、重试、高可用的使用方式

    上篇文章主要介绍了Zuul网关使用模式,以及自动转发机制,但其实Zuul还有更多的应用场景,比如:鉴权.流量转发.请求统计等等,这些功能都可以使用Zuul来实现. Zuul的核心 Filter是Zuu ...

  6. SpringCloud之Zuul 自定义filter

    实现过滤器很简单,只需要继承ZuulFilter,并实现ZuulFilter中的抽象方法. filterType():定义过滤器的类型,它有4种类型,分别是pre.post.routing和error ...

  7. spring cloud深入学习(十二)-----Spring Cloud Zuul网关 Filter、熔断、重试、高可用的使用方式

    Zuul的核心 Filter是Zuul的核心,用来实现对外服务的控制.Filter的生命周期有4个,分别是“PRE”.“ROUTING”.“POST”.“ERROR”,整个生命周期可以用下图来表示. ...

  8. Zuul token FIlter 验证失败结果输出

    1.背景 用 postman 测试 zuul 网关 路由成功和失败的时候,发现 路由成功的时候,返回的结构体 是 json 格式,但是路由失败的时候,返回的是空. 结构体居然不一样,这对调用方来说也要 ...

  9. 微服务网关Zuul过滤器Filter

    Zuul本质 Zuul是一个网关,关于网关的介绍参考:亿级流量架构之网关设计思路.常见网关对比, 可知Zuul是一个业务网关, 而深入了解Zuul, 基本就是一系列过滤器的集合: Zuul的过滤器 下 ...

随机推荐

  1. 机器学习技法笔记:Homework #8 kNN&RBF&k-Means相关习题

    原文地址:https://www.jianshu.com/p/1db700f866ee 问题描述 程序实现 # kNN_RBFN.py # coding:utf-8 import numpy as n ...

  2. Comet OJ - Contest #4 B题 奇偶性

    题目链接:https://www.cometoj.com/contest/39/problem/B?problem_id=1577 题意:给你一个数列,求L 到 R 区间内 所有数列 (ƒn mod ...

  3. shell 生成多级目录遇到最后一级目录乱码 mkdir -p a/b/c/d

    使用shell完成从配置文件中获取路径(字符匹配),在生成多级路径的过程过遇到最后一级目录乱码. 代码如下: mkdir -p $path 这个$path是从配置文件中读取. 如何解决: 1.检查是否 ...

  4. js文本框焦点自动聚焦到下个文本框

    HTML: <form> <input type="text" name="text1" maxlength="3" si ...

  5. 注册页面-使用form模块搭建

    基于Django的form模块,快速的搭建注册页面,每个限制条件,都放在form模块里面,不单独对每一项编写标签,使用模版的 for 循环来渲染. 首先设置form模块 在blogs模块下创建一个bl ...

  6. 对TextVIew中特定字符串设定onTouchEvent方法

    上面是Iphone备忘录的图,笔者之前接到一个需求是实现点击文本框里的数字,弹出一个类似上图的按钮,显示出复制,要求是这个按钮的位置必须是根据你点击的位置进行定位(为什么这么说,是因为我们不可能把按钮 ...

  7. 【HDOJ】P2058 The sum problem

    题意很简单就是给你一个N和M,让你求在1-N的那些个子序列的值等于M 首先暴力法不解释,简单超时 再仔细想一想可以想到因为1-N是一个等差数列,可以运用我们曾经学过的只是来解决 假设开始的位置为s,结 ...

  8. add a characteristic in enovia PLM

    Problem: add a new Char. name D_COI6 that the description is Injected coloration #7 (COI6) in the D_ ...

  9. vscode centos

    https://www.cnblogs.com/My-Jinse/articles/8400137.html rpm -ql 包名 缺少libXss.so.1()(64bit) yum install ...

  10. IDA静态编译之sub

    int __thiscall sub_10009800(const wchar_t *this, int a2, int a3, HKEY hKey){ } 说明:__thiscall  dll内子函 ...