页面树结构

版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

1、背景

若要自定义手机和邮件验证码的发送、校验逻辑,对接特定的验证码平台,可以定制发送、校验逻辑。若要自定义手机和邮件验证码的发送、校验逻辑,对接特定的验证码平台,可以定制验证码的生成、存储、发送、校验等逻辑。

2、接口说明

2.1 gradle依赖

代码块
languagejava
"smartbi:Smartbi-UserManager.Interface:${project.ext.SMARTBI_VERSION}",    

...

代码块
languagejava
// smartbi.usermanager.model.CaptchaCodeSendReq
/**
 * 发送验证码请求实体
 */
public class CaptchaCodeSendReq {
	/** 发送验证码的类型,例如登录验证时发送的验证码,修改密码时发送的验证码 */
	CaptchaSendType sendType;
	/** 用户名 */
    String userName;
	/** 手机或邮箱 */
	String phoneOrEmail;
}

// smartbi.usermanager.model.CaptchaCodeValidReq
/**
 * 校验验证码请求实体
 */
public class CaptchaCodeValidReq {
	/** 发送验证码的类型,例如登录验证时发送的验证码,修改密码时发送的验证码 */
	CaptchaSendType sendType;
	/** 用户名 */
  	String userName;
	/** 手机或邮箱*/
	String phoneOrEmail;
	/** 验证码 */
	String captchaCode;
}

// smartbi.usermanager.model.CaptchaCodeValidResp
/**
 * 校验验证码结果实体
 */
public class CaptchaCodeValidResp {
	/** 验证码验证结果 */
	boolean success;
	/** 验证码验证失败时的报错信息 CAPTCHACODE_INVALID, CAPTCHACODE_ERROR, CAPTCHACODE_EXPIRED */
	UserManagerErrorCode errCode;
}

// smartbi.usermanager.service.ICaptchaCodeService
/**
 * 验证码发送和校验类
 */

public interface ICaptchaCodeService {
  /**
  * 发送验证码
  * @param req 
  * @return 发送是否成功
  */
  boolean sendCaptchaCode(CaptchaCodeSendReq req);

  /**
  * 校验验证码
  * @param req 
  * @return 验证结果
  */
  CaptchaCodeValidResp validateCaptchaCode(CaptchaCodeValidReq req);
}

3、参考例子

代码块
languagejava
// 自定义实现类,需要实现验证码的生成、存储、发送、校验等逻辑
public class CustomSmsCaptchaCodeService extendsimplements AbstractCaptchaCodeServiceICaptchaCodeService {
  public boolean sendCaptchaCode(CaptchaCodeSendReq req) {
    // 具体实现参考产品内 SmartbiSmsCaptchaCodeService.sendCaptchaCode 方法的实现
  }
  public CaptchaCodeValidResp validateCaptchaCode(CaptchaCodeValidReq req) {
    // 具体实现参考产品内 SmartbiSmsCaptchaCodeService.validateCaptchaCode 方法的实现
  }
}

public class CustomEmailCaptchaCodeService extendsimplements AbstractCaptchaCodeService {
  public boolean sendCaptchaCode(CaptchaCodeSendReq req) {
    // 具体实现参考产品内 SmartbiEmailCaptchaCodeService.sendCaptchaCode 方法的实现
  }
  public CaptchaCodeValidResp validateCaptchaCode(CaptchaCodeValidReq req) {
    // 具体实现参考产品内 SmartbiEmailCaptchaCodeService.validateCaptchaCode 方法的实现
  }
}

// 设置自定义实现
UserManagerModule.getInstance().setSmsCaptchaCodeService(new CustomSmsCaptchaCodeService());
UserManagerModule.getInstance().setEmailCaptchaCodeService(new CustomEmailCaptchaCodeService());

也可以继承 smartbi.usermanager.service.AbstractCaptchaCodeService 类,该类提供了一些公共方法,例如生成验证码的方法 generateCaptchaCode。

注意:验证码应当限制发送频率、校验次数,避免恶意请求频繁发送验证码造成经济损失、频繁校验验证码导致被枚举。