在前两篇文章中, 我们实现了同步/异步发送短信以及限制发送短信频率.这一篇, 我们介绍一下限制每日向同一个用户(根据手机号和ip判断)发送短信的次数
1、数据表结构
由于需要记录整天的发送记录, 因此这里我们将数据保存到数据库中. 数据表结构如下:
type为验证码的类型, 比如注册, 重置密码等.
sendTime的默认值为当前时间.
2、限制日发送次数
我们这里需要用到上一篇中提到的接口和实体类.
DailyCountFilter.java
public class DailyCountFilter implements SmsFilter {
private int ipDailyMaxSendCount;
private int mobileDailyMaxSendCount;
private SmsDao smsDao;
// 省略了部分无用代码
@Override
public boolean filter(SmsEntity smsEntity) {
if (smsDao.getMobileCount(smsEntity.getMobile()) >= mobileDailyMaxSendCount) {
return false;
}
if (smsDao.getIPCount(smsEntity.getIp()) >= ipDailyMaxSendCount) {