`

发送短信按钮倒计时服务器端支持

    博客分类:
  • Java
阅读更多

发送短信按钮倒计时服务器端支持

发送成功之后才计时:

 

 

/***
     * 服务器端启动倒计时,即记录时间戳
     *
     * @param mobile
     */
    private void setSMSLimit(String mobile) {
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
        saveExpxKeyCache(request, response, mobile, String.valueOf(DateTimeUtil.getCurrentTimeSecond()), 60);
    }

 上述代码中的saveExpxKeyCache 是关键方法,用于记录时间戳

public /*synchronized*/ void saveExpxKeyCache(HttpServletRequest request, HttpServletResponse response, String k, String v,long time) {

        String cid = getCid(request, response);

//        logger.debug("cid is " + cid);
//        logger.debug("set " + k + " to value : " + v);

        RedisHelper helper = RedisHelper.getInstance();
        helper.saveExpxKeyCache(cid+k,  v,time);


    }

 对上述方法的说明:

参数说明:

(1)k:redis的key,比如手机号;

(2)v:redis的value,比如发送短信时的时间戳;

(3)time:超时时间

 

time就是发送短信间隔的时间,所以就是60秒,这个方法的功能:

60秒之后,这条记录被自动删除.

 

 发送短信之前得检查是否在60秒之内发送短信:

 public WapResponseDto sendMobileSMS(HttpServletRequest request, HttpServletResponse response,
                                        String mobile,
                                        String type/*,
                               String authImage*/) {
        WapResponseDto wapResponseDto = null;

        //检查格式
        if (!StringUtil.isMobileNumber(mobile)) {
            wapResponseDto = new WapResponseDto();
            wapResponseDto.setResult(false);
            wapResponseDto.setErrorFieldName("mobile");
            wapResponseDto.setErrorMessage(Constant.ERROR_MESSAGE_MOBILE_FORMAT_INVALID);
            return wapResponseDto;
        }
        WapResponseDto SMSLimitResponseDto = verifySMSLimit(mobile);
        if (!StringUtil.isNullOrEmpty(SMSLimitResponseDto)) {//检查一分钟之内不能重复发送手机短信
            return SMSLimitResponseDto;
        }

 

 

/***
     * 检查一分钟之内不能重复发送手机短信
     *
     * @param mobile
     * @return : 返回null则表示校验通过
     */
    public WapResponseDto verifySMSLimit(String mobile) {
        int remainingTime = sMSWaitingTime(mobile, false);//一分钟之内不能重复发送手机短信
        if (remainingTime > 0) {
            SMSRemainingTimeDto sMSRemainingTimeDto = new SMSRemainingTimeDto();
            sMSRemainingTimeDto.setResult(false);
            sMSRemainingTimeDto.setErrorMessage(Constant.getErrorMsg("a00001"));
            sMSRemainingTimeDto.setRemainingSecond(remainingTime);
            return sMSRemainingTimeDto;
        }
        return null;
    }

 

sMSWaitingTime 用于检查还要等待多长时间:

/***
     * 倒计时还剩余多长时间
     * @param mobile : 手机号
     * @param reallySendSMS : 是否真正发送短信
     * @return : second
     */
    public int sMSWaitingTime(String mobile,boolean reallySendSMS) {
    	HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
		HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
		RedisHelper rdsHelper = RedisHelper.getInstance();
		String cid = getCid(request, response);
		
        String lastSendSMSTime = rdsHelper.getCache(cid+mobile);

        if(StringUtil.isNullOrEmpty(lastSendSMSTime)) {
        	if(reallySendSMS){
        		saveExpxKeyCache(request, response, mobile, String.valueOf(DateTimeUtil.getCurrentTimeSecond()),60);
        	}
            return 0;//不需要倒计时
        } else {
            long lastSendSMSTimeSecond=Long.parseLong(lastSendSMSTime);
        	long currentTimeSecond=DateTimeUtil.getCurrentTimeSecond();
        	int delter=(int) (currentTimeSecond-lastSendSMSTimeSecond);
        	if(delter>=60){
                return 0;//不需要倒计时
            }else{
        		return 60-delter;
        	}
        }
    }

 

注意:如果超过60秒,lastSendSMSTime 应该是为null的.因为我通过saveExpxKeyCache 设置了超时时间

 

 

  • 大小: 59.2 KB
0
1
分享到:
评论

相关推荐

    JQUERY短信倒计时 问题:限制次数、

    当然,实际项目中可能需要服务器端配合,进行更严格的次数验证。 在提供的压缩包文件中,可能包含了实现这一功能的相关代码示例或模板,可以参考这些文件来更好地理解并实现这个功能。在实际开发中,还需考虑用户...

    jquery倒计时短信验证

    5. 用户输入验证码后,前端校验并与服务器端进行确认。 在jQuery中,我们可以使用`.click()`方法来监听按钮点击事件,当用户点击获取验证码按钮时触发相应的函数。该函数可以包括发送请求到服务器(通常为Ajax请求...

    jquery表单中获取短信验证码倒计时

    在jQuery中实现表单中的短信验证码倒计时功能是一项常见的前端交互设计,它增强了用户体验,同时也确保了用户在请求验证码后必须等待一段时间才能再次发送,防止滥用系统资源。以下将详细讲解如何使用jQuery来实现这...

    网页上发送短信时验证码变灰倒计时显示

    总的来说,“网页上发送短信时验证码变灰倒计时显示”是一个综合了前后端交互、用户体验和安全控制的典型功能,体现了Web开发中的实用性和安全性原则。通过深入理解并熟练应用这些技术,开发者可以构建出更高效、更...

    获取短信验证码倒计时

    在IT行业中,尤其是在Web开发和手机应用开发领域,获取短信验证码倒计时是一个常见的功能,它主要用于增强用户体验,确保用户在请求短信验证码后不会频繁发送,同时也为服务器提供了一定的保护,避免短时间内大量...

    安卓发送验证码倒计时效果和自动获取验证码并填充

    在安卓应用开发中,"安卓发送验证码倒计时效果和自动获取验证码并填充"是一个常见的功能,主要用于用户注册、登录或修改重要信息时的身份验证。这个功能涉及到多个关键知识点,包括网络请求、短信监听、UI更新以及...

    jQuery表单验证与表单美化手机发送验证码倒计时插件

    这个过程涉及服务器端接口调用、异步请求处理和前端的倒计时展示。压缩包中的`index.html`和`js\jquery-1.8.3.min.js`可能包含了实现这一功能的HTML结构和JavaScript代码。`jquery-1.8.3.min.js`是jQuery的核心库,...

    基于jQuery实现发送短信验证码后的倒计时功能(无视页面关闭)

    为了提高安全性,通常建议使用服务器端时间来计算倒计时,但该示例为了简化问题而选择了客户端时间。 此外,代码中使用了`setTimeout`而不是`setInterval`来执行定时任务。这是因为`setTimeout`更适合这种需要精确...

    微信小程序发送短信验证码完整实例

    本实例中利用了微信小程序的前端开发框架和微信提供的API来实现无需服务器端的短信验证码发送及验证功能。 知识点概览: 1. 微信小程序前端页面设计(WXML和WXSS) 2. 微信小程序页面逻辑处理(JavaScript) 3. ...

    JS获取短信验证码倒计时的实现代码

    在实际的应用中,还需要服务器端的支持,即服务器在接收到请求时,会检查用户的手机号是否已存在最近一段时间内发送过的记录,如果存在,则不再发送新的验证码短信,而是返回倒计时信息。 在用户体验方面,倒计时...

    jQuery实现的手机发送验证码倒计时效果源码.zip

    "使用须知.txt"文件则可能提供了关于如何部署和使用这些源码的指南,包括可能的依赖项、如何配置以及如何与服务器端接口配合等。 为了更好地理解和使用这些源码,你需要熟悉基本的HTML和JavaScript语法,以及jQuery...

    jQuery短信验证倒计时功能实现方法详解

    该函数初始化倒计时、生成验证码、设置按钮效果、启动计时器,并向服务器发送POST请求。生成验证码的方式是通过一个简单的for循环,将随机数拼接成字符串。 `SetRemainTime`函数是倒计时的核心,它负责更新页面上...

    JS实现用户注册时获取短信验证码和倒计时功能

    需要注意的是,在实际的开发中,为了保证验证码的及时性和准确性,通常会将倒计时的时间设置为较短的时间(如1分钟),在倒计时结束之后用户可以再次点击发送验证码的按钮请求新的验证码。前端代码需要通过AJAX与...

    JS点击按钮自动倒计时代码

    2. **接口调用**:通过Ajax或其他异步请求方式,调用服务器端的验证码发送接口。 3. **按钮状态更新**:发送请求后,改变按钮的文字,例如从"获取验证码"变为"60秒后重试",并禁用按钮。 4. **倒计时逻辑**:使用`...

    jquery实现的发送短信验证时间倒计时间隔表格表单特效源码.zip

    在实际应用中,这个源码可能还包括服务器端接口的调用,用于发送短信验证码。通常,当用户点击发送按钮后,前端会通过Ajax向后端发送请求,后端接收到请求后生成验证码并发送至指定手机号。前端通过Ajax的回调处理...

    ios-验证码 倒计时.zip

    3. **验证码生成与发送**: 服务器端通常会生成一个随机的、一次性使用的验证码,并通过短信或邮件的形式发送给用户。验证码的生成可以是纯数字、字母组合,或者更复杂的图形验证码。 4. **倒计时逻辑**: 用户点击...

    js实现发送验证码后的倒计时功能

    - **限制频率**: 通过倒计时机制,限制用户发送验证码的频率,防止滥用短信接口。 - **用户体验**: 通过禁用按钮并在倒计时期间显示剩余时间,告知用户验证码发送状态,提升用户体验。 以上内容是对所提供文件...

    javascript短信发送案例.docx

    - **增强安全性**:实际应用中还需要对接服务器端,通过后端逻辑发送短信,并处理可能的安全问题,比如限制单位时间内同一手机号的发送次数。 - **响应式设计**:对于移动端,可以进一步优化布局,使其适应不同屏幕...

    js实现5秒倒计时重新发送短信功能

    发送短信验证码是现代互联网应用中常见的用户验证方式,通常由服务器端的程序通过短信服务商的API来实现。而在前端页面上,通过提供一个按钮和输入框,可以让用户在需要验证时点击按钮发送请求到服务器,触发短信...

    jQuery实现倒计时重新发送短信验证码功能示例

    在本文中,我们将探讨如何使用jQuery来实现一个倒计时重新发送短信验证码的功能。这个功能在许多网站的注册或登录过程中被广泛使用,用于验证用户手机号码的真实性。下面,我们将详细解析提供的代码示例,解释其中的...

Global site tag (gtag.js) - Google Analytics