极验——行为验证的开发与使用

一、极验

    相对于传统的图片验证码,极验将人机交互的安全提升了一个大大的阶梯,无论从页面ui、用户使用体验和网站安全任何一个方面,极验都完美的胜出。本篇主要介绍在开发中如何应用极验行为验证的技术,至于极验api、申请极验应用id和秘钥的方法,请看极验官网,点击这里进入极验官方网站

二、配置文件

    不同于极验官方API,我将应用id、秘钥等配置数据放在了properties配置文件里,方便进行查看和管理。配置文件如下:

geetest.id=592c1eab4790ba082fd27b24305ef6

geetest.key=1bd3860bf8d3ccce4f050de1456471

geetest.isnewfailback=true

geetest.clienttype=web

    关于如何获取配置文件的信息,请看我的博客:还没写= = 

三、后台方法

    其实后台方法这里主要是转发生成极验验证或验证极验的请求,当然,我们也可以在这里记录具体的信息或者其他。不过这里博主并没有做这些,只是简单的去转发请求。

    1.极验验证初始化

     这里需要说一下,代码里部分的参数是配置在常量类里的,大家在实际使用的时候,根据自己的情况去修改即可。初始化的方法如下:

/**
	 * 初始化极验
	 * 
	 * @param request
	 * @param geetestDto
	 * @param random	防止缓存
	 * @return
	 */
	@RequestMapping("init/{random}")
	@ResponseBody
	@SysControllerLog(description="极验验证初始化",logType=101,module=101)
	public String initGeetest(HttpServletRequest request) {
		GeetestLib geetestLib = new GeetestLib(prop.getPropValue(SysParams.GEETEST_ID),
				prop.getPropValue(SysParams.GEETEST_KEY),Boolean.valueOf(prop.getPropValue(SysParams.GEETEST_CALL_BACK)));
		
		//自定义参数,可选择添加
		User user = (User)request.getSession().getAttribute(SysParams.CURRENT_USER);
		HashMap<String, String> param = new HashMap<String, String>();
		param.put("user_id", user==null?SysParams.ADMIN_ID:user.getUserId()); 	//网站用户id
		param.put("client_type", prop.getPropValue(SysParams.GEETEST_CLIENT_TYPE)); 	
		param.put("ip_address", IPUtil.getRemoteHost(request)); 
		
		String resStr = "{}";
		
		//进行验证预处理
		int gtServerStatus = geetestLib.preProcess(param);
		//将服务器状态设置到session中
		request.getSession().setAttribute(geetestLib.gtServerStatusSessionKey, gtServerStatus);
		//将userid设置到session中
		request.getSession().setAttribute(SysParams.GEETEST_USER_ID, user==null?SysParams.ADMIN_ID:user.getUserId());
		
		resStr = geetestLib.getResponseStr();
		
		System.out.println("请求极验初始化的返回结果为:"+resStr);
		return resStr;
	}

    2.极验验证

    极验验证的方法我是没有使用的,如果没有特别需要的管理或记录的可以忽略这个方法。代码如下:

/**
	 * 极验二次验证
	 * 
	 * @param request
	 * @param geetestDto
	 * @return
	 */
	@RequestMapping("verify/{random}")
	@ResponseBody
	@SysControllerLog(description="极验二次验证",logType=101,module=101)
	public String verifyGeetest(HttpServletRequest request) {
		GeetestLib gtSdk = new GeetestLib(prop.getPropValue(SysParams.GEETEST_ID),
				prop.getPropValue(SysParams.GEETEST_KEY),Boolean.valueOf(prop.getPropValue(SysParams.GEETEST_CALL_BACK)));
		
		String challenge = request.getParameter(GeetestLib.fn_geetest_challenge);
		String validate = request.getParameter(GeetestLib.fn_geetest_validate);
		String seccode = request.getParameter(GeetestLib.fn_geetest_seccode);
		
		//从session中获取gt-server状态
		int gt_server_status_code = (Integer) request.getSession().getAttribute(gtSdk.gtServerStatusSessionKey);
		//从session中获取userid
		String userid = (String)request.getSession().getAttribute(SysParams.GEETEST_USER_ID);
		
		//自定义参数,可选择添加
		HashMap<String, String> param = new HashMap<String, String>(); 
		param.put("user_id", userid); 
		param.put("client_type", prop.getPropValue(SysParams.GEETEST_CLIENT_TYPE)); 
		param.put("ip_address", IPUtil.getRemoteHost(request));
		
		int gtResult = 0;
		if (gt_server_status_code == 1) {
			//gt-server正常,向gt-server进行二次验证
			gtResult = gtSdk.enhencedValidateRequest(challenge, validate, seccode, param);
			System.out.println("极验二次校验返回结果:"+gtResult);
		} else {
			// gt-server非正常情况下,进行failback模式验证
			System.out.println("failback:use your own server captcha validate");
			gtResult = gtSdk.failbackValidateRequest(challenge, validate, seccode);
			System.out.println("极验二次校验返回结果:"+gtResult);
		}

		// 验证成功
		if (gtResult == 1) {
			return AjaxDone.retParam(BackCode.GEETEST_SUCCESS, gtSdk.getVersionInfo());
		} else {		
			return AjaxDone.retParam(BackCode.GEETEST_FAIL, gtSdk.getVersionInfo());
		}
	}

    3.极验返回码

    极验详细的返回码信息,可以参照官方API。

四、前台生成极验验证

    1.demo页面为注册页面,首先引入js(具体路径视个人情况):

<script type="text/javascript" src="${pageContext.request.contextPath }/static/geetest/gt.js"></script> 

    2.定义极验验证的显示区域

<div>
		        <div id="captcha"> </div>
		    </div>

    3.初始化极验验证

/*****************极验滑动验证*********************/
        $(function(){
        	$.ajax({
			    // 获取id,challenge,success(是否启用failback)
			    url: "${pageContext.request.contextPath }/common/geetest/init/" + (new Date()).getTime(), // 加随机数防止缓存
			    type: "post",
			    dataType: "json",
			    success: function (data) {
			    	var msg =  $.parseJSON(data); 
			         // 调用 initGeetest 初始化参数
		            // 参数1:配置参数
		            // 参数2:回调,回调的第一个参数验证码对象,之后可以使用它调用相应的接口
		            initGeetest({
		                gt: msg.gt,
		                challenge: msg.challenge,
		                new_captcha: msg.new_captcha, // 用于宕机时表示是新验证码的宕机
		                product: "float", // 产品形式,包括:float,popup,当为bind时,可以自定义检查验证,这里不需要记录用户的校验数据,故不使用
		                offline: !msg.success, 
		                width: "100%"
		            }, function (captchaObj) {
		            	captchaObj.appendTo("#captcha");
				        
		            });
			    }
			});
			
        });

    4.验证极验验证的结果

    这里,我是与获取短信验证码的点击事件绑定在一起的,当用户需要获取验证码时,需要先通过短信验证。需要注意的是,captchaObj不是全局变量,所以,建议页面的函数尽量写在初始化函数的回调函数里。代码如下:

var validate = captchaObj.getValidate();
if (!validate) {
	layui.use('layer', function(){
		var $ = layui.jquery, layer = layui.layer; //独立版的layer无需执行这一句
		layer.msg('请点击上方按钮进行验证');
	});
	return;
}

    5.重置极验验证

//重置验证码
captchaObj.reset();

五、使用效果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
FPGA自学笔记——设计与验证JMB FPGA(可编程逻辑门阵列)是一种可编程的硬件平台,可以实现各种数字电路的设计与验证。本文将简要介绍使用FPGA自学设计与验证JMB(低功耗、高效能、集成度高的多媒体芯片)的过程。 首先,我们需要了解JMB的功能和特性。JMB是一种面向多媒体应用的芯片,具备低功耗、高效能和高集成度的优势。我们需要详细研究JMB的硬件架构和内部模块,包括处理器核、存储器模块、图像和音频处理模块等。 接下来,我们可以使用FPGA开发板来设计和验证JMB。首先,我们需要熟悉FPGA设计工具,例如Vivado或Quartus等。这些工具提供了图形化界面和硬件描述语言(HDL)等设计方法。我们可以使用HDL编写JMB的功能模块,并将其综合为FPGA可执行的位流文件。 在设计完成后,我们需要验证JMB的功能和性能。我们可以使用仿真工具(例如ModelSim或ISE Simulator)来模拟JMB在不同情况下的行为。通过设计测试程序并运行仿真,我们可以验证JMB的各个模块是否正确地工作,是否满足设计要求。 在验证完成后,我们可以将位流文件下载到FPGA开发板中进行智能芯片的物理实现和测试。通过与外部设备的连接以及相关测试程序的运行,我们可以验证JMB在实际硬件中的功能和性能。 总结起来,学习FPGA设计与验证JMB,我们需要熟悉JMB的硬件架构和内部模块,并使用FPGA开发工具进行设计与验证。通过仿真和物理实现测试,我们可以验证JMB的功能和性能。这些过程需要理论知识和实践经验的结合,希望这些笔记能够给你提供一些参考和指导。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值