限制短信六十秒能只能发送一条

所谓限制短信发送频率 大体思路是 判断之前发送短信存储的ip在redis是否存在 若存在则拦截

实现 HandlerInterceptor
类中有三个方法分别是

  • afterCompletion: controller执行之后 渲染视图之后
  • postHandle: controller 执行之后 渲染视图之前
  • preHandle: controller 执行之前

我们只要在controller执行之前 判断是否key是否存在 若存在返回false表示拦截 返回true表示通过

public class PassportInterceptor implements HandlerInterceptor {
    @Autowired
    protected RedisOperator redisOperator;

    protected static final String MOBILE_SMS_CODE = "mobile_sms_code";
    /**
     * 进入controller之前拦截
     * @param request
     * @param response
     * @param handler
     * @return
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String userIp = IpUtil.getIp(request);

        if (redisOperator.keyIsExist(MOBILE_SMS_CODE + ":" + userIp)) {
            System.out.println("短信发送过于频繁");

            return false;
        } else {
            return true;
        }
    }
}

之后写配置类 将拦截器注册并指明是那条路由匹配该拦截器

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
    @Bean
    public PassportInterceptor passportInterceptor() {
        return new PassportInterceptor();
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(passportInterceptor())
                .addPathPatterns("/passport/getSMSCode");
    }

}
posted @   RainbowMagic  阅读(337)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示