• spring boot 实现一个 禁止重复请求


    在Spring Boot中,实现禁止重复请求可以通过以下步骤:

    1.添加依赖 首先,需要添加Spring Boot的Web依赖,在pom.xml文件中添加以下依赖:

    1. <dependency>
    2. <groupId>org.springframework.bootgroupId>
    3. <artifactId>spring-boot-starter-webartifactId>
    4. dependency>

    2.创建自定义注解 创建一个自定义的注解,用于标注需要进行重复请求限制的方法。可以通过@Retention(RetentionPolicy.RUNTIME)注解来指定注解的保留策略。

    1. @Retention(RetentionPolicy.RUNTIME)
    2. @Target(ElementType.METHOD)
    3. public @interface NoRepeatRequest {
    4. }

    3.编写拦截器 创建一个拦截器,用于拦截标有@NoRepeatRequest注解的方法。在拦截器中可以使用一个容器来存储已处理的请求,比如使用ConcurrentHashMap。

    1. @Component
    2. public class NoRepeatRequestInterceptor implements HandlerInterceptor {
    3. private Map requestMap = new ConcurrentHashMap<>();
    4. @Override
    5. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    6. // 获取请求的URL和方法名
    7. String url = request.getRequestURL().toString();
    8. String method = request.getMethod();
    9. // 生成请求的唯一标识
    10. String key = url + "_" + method;
    11. // 如果容器中已存在该请求,则表示是重复请求
    12. if (requestMap.containsKey(key)) {
    13. response.getWriter().write("Duplicate request");
    14. return false;
    15. }
    16. // 将请求添加到容器中
    17. requestMap.put(key, new Object());
    18. return true;
    19. }
    20. @Override
    21. public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    22. // 请求处理完毕后,从容器中移除该请求
    23. String url = request.getRequestURL().toString();
    24. String method = request.getMethod();
    25. String key = url + "_" + method;
    26. requestMap.remove(key);
    27. }
    28. }

    4.注册拦截器 在配置类中注册拦截器,并将其应用于需要进行重复请求限制的方法。

    1. @Configuration
    2. public class WebConfig implements WebMvcConfigurer {
    3. @Autowired
    4. private NoRepeatRequestInterceptor noRepeatRequestInterceptor;
    5. @Override
    6. public void addInterceptors(InterceptorRegistry registry) {
    7. registry.addInterceptor(noRepeatRequestInterceptor)
    8. .addPathPatterns("/**") // 可以根据具体的URL进行配置
    9. .excludePathPatterns("/error"); // 排除错误页面的拦截
    10. }
    11. }

    现在,只需要在需要进行重复请求限制的方法上添加@NoRepeatRequest注解即可。

    1. @Controller
    2. public class TestController {
    3. @NoRepeatRequest
    4. @RequestMapping("/test")
    5. @ResponseBody
    6. public String test() {
    7. // 处理业务逻辑
    8. return "success";
    9. }
    10. }

    这样,当重复请求该方法时,会返回"Duplicate request",避免重复执行相同的操作。

    以上就是使用Spring Boot实现禁止重复请求的方法。通过自定义注解、拦截器和容器,可以实现对重复请求的限制。

  • 相关阅读:
    RabbitMQ延迟消息:死信队列 | 延迟插件 | 二合一用法+踩坑手记+最佳使用心得
    汽车租赁系统毕业设计,汽车租赁管理系统设计与实现,毕业设计论文毕设作品参考
    微前端(qiankun)主应用共享React组件
    张家口城市名片欧洲推介会暨贸易促进会(荷兰站)在张家口顺利举行
    C++模板元模板实战书籍讲解第一章题目讲解
    [LeetCode]剑指 Offer 12. 矩阵中的路径
    【无人机】基于拓展卡尔曼滤波时序四旋翼无人机状态跟踪附matlab代码
    轻松批量剪辑:将MP4视频转换为FLV格式
    工作总结:kafka踩过的坑
    使用C#编写一个读取和判断股票实时成交数据的小工具
  • 原文地址:https://blog.csdn.net/xukris/article/details/136670284