需要实现Poster接口来真实的发送验证码,可参考LoggerPoster实现。
需要实现CodeGenerator接口来生成验证码,SimpleCodeGenerator已经可以满足绝大多数的应用场景了。
需要实现ContentGenerator接口来生成验证码内容,
可参考SimpleContentGenerator实现。
通过访问Context可获取到足够多的环境信息,生成足够复杂的验证码。
其中Context.getCodeAttribute()
是每次发送、验证验证码都需要传入的自定义属性。
需要实现KeyGenerator。
通过KeyGenerator
可以很容易的实现多类型,多通道的验证码。
KeyGenerator generator = (recipient, context) -> {
CodeAttribute attribute = context.getCodeAttribute();
StringBuilder sb = new StringBuilder();
sb.append(attribute.getCodeType())
.append("_")
.append(recipient)
.append("_")
.append(attribute.getAttribute("VERIFY_TYPE"));
Long userId = (Long) attribute.getAttribute("USER_ID");
if (userId != null) {
sb.append("_user_id_").append(userId);
}
return sb.toString();
};
需要实现CacheExpireCalculator接口来控制。
可参考SimpleCacheExpireCalculator实现,该实现会尽量控制发送历史在当日的最后时刻(23:59:59
)过期,
但如果用户发送的验证码的有效期持续到第二天,那么该验证码发送历史的过期时间则持续到该验证码过期。
因此需要BanishPostHistoryPostFilter来驱逐那些前一天发送的验证码。
需要实现PostFilter接口.
- BanishPostHistoryPostFilter:主要是驱逐那些昨日发送的验证码,以确保后续的
PostFilter
能够正常工作。 - PostCountPostFilter:主要作用是控制验证码缓存在失效前的总发送数量。
- PostIntervalPostFilter:主要作用是控制每个验证码之间的发送间隔,确保用户无法频繁发送验证码。
- PostSubIntervalCountPostFilter:主要作用是在
PostCountPostFilter
的基础上,控制一定时间范围内的总验证码发送数量,如每天最多发送20
条验证码且每小时最多发送5
条验证码。