spring处理幂等性filter

1:创建IdempotentFilter过滤器,项目是spring boot工程

 
public class IdempotentFilter extends OncePerRequestFilter {
    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        String token = request.getParameter("token");


        HttpSession httpSession = request.getSession(false);

        Object value = httpSession.getAttribute(token);

        if(value != null){
            throw new ServletException("幂等性校验");
        }

        httpSession.setAttribute(token,token);

        try{
            filterChain.doFilter(request,response);
        }finally {
            httpSession.removeAttribute(token);
        }
    }
}



2:流程分析

请求第一次过来->获取参数token(可以是请求头上绑定任何参数)
->把token值放在session上(可以放在redis 或中间件上都可以)->
如果获取值说明不是第一次请求-> 直接拒绝

github代码

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容