跳到主要内容

验证码

验证码插件体系说明

image-20201207114436309

插件接口

ValidatorPlugin

插件方法描述

    /**
* 配置各个验证方案的参数
*
* @return 参数列表
*/
List<ConfigItem> definitionConfigItem();

/**
* 获取插件ID
*
* @return 插件beanId
*/
String getPluginId();

/**
* 获取插件名称
*
* @return 插件名称
*/
String getPluginName();

/**
* 验证网关是否开启
*
* @return 0 不开启 1 开启
*/
Integer getIsOpen();

/**
* 验证方法
* @param param 要验证的参数
*/
void onValidate(Map param);

现有验证方式

图片验证码、阿里云滑动验证

image-20201207114436309

开发新的验证码插件

实现插件接口

@Service
public class YourPlugin implements ValidatorPlugin {
//其他方法略
}

注意:用@Service注解为spring bean,以便spring ioc识别,将插件扫描加入插件体系。

定义插件id及名字

    @Override
public String getPluginId() {
return "myPluginName";
}
@Override
public String getPluginName() {
return "xx存储插件";
}

注意:需要保持插件id的唯一性,这是插件机制调起插件依据

定义验证方式配置项

验证方式配置项的目的是定义用户使用验证前需要配置的一些验证方式参数,如阿里云滑动验证需要应用程序秘钥(App_key)等。

image-20201207114436309

要达到上图的效果,需要后端来配置信息,具体在验证方式的definitionConfigItem中,一个配置项相当于一个ConfigItem对象,如下,需要根据实际情况调整

    @Override
public List<ConfigItem> definitionConfigItem() {
List<ConfigItem> list = new ArrayList<>();
ConfigItem appKeyItem = new ConfigItem();
appKeyItem.setName("appKey");
appKeyItem.setText("应用程序秘钥");
appKeyItem.setType("text");

ConfigItem sceneItem = new ConfigItem();
sceneItem.setName("scene");
sceneItem.setText("场景标识");
sceneItem.setType("text");

ConfigItem regionItem = new ConfigItem();
regionItem.setName("regionId");
regionItem.setText("地区标识");
regionItem.setType("text");

ConfigItem accessIdItem = new ConfigItem();
accessIdItem.setName("accessKeyId");
accessIdItem.setText("访问密钥ID");
accessIdItem.setType("text");

ConfigItem accessKeyItem = new ConfigItem();
accessKeyItem.setName("accessKeySecret");
accessKeyItem.setText("访问密钥");
accessKeyItem.setType("text");

list.add(appKeyItem);
list.add(regionItem);
list.add(accessIdItem);
list.add(accessKeyItem);
return list;
}

验证方式配置的获取

用户配置了验证平台的参数(如应用程序秘钥(App_key)等)在验证方式调起时需要获取到这些参数,可以通过如下方法获取:

 Map  ValidatorManagerImpl.getConfig()

返回值

针对阿里云滑动验证,返回类型Map如下,不同的验证返回的map中的key值不同,会与定义验证方式配置项那步设置的内容一致

{
"appKey":"XXXXXXXXX",
"scene":"XXXXXXX",
"regionId":"XX",
"accessKeyId":"XX",
"accessKeySecret":"XX",
}

编写验证逻辑

    @Override
public void onValidate(Map param) {
//在这里编写插件的查询逻辑
}

入参

  • param

    上一步中验证方式配置的获取返回的map中的值