业务场景

在系统业务中,需要想客户发送手机验证码,进行验证后,才能提交。但为了防止不正当的短信发送(攻击,恶意操作等),需要在发送短信前添加一个行为验证(这里使用的是 极验);

参考文档:

极验行为验证文档:https://docs.geetest.com/install/overview/start/

极验demo:https://www.geetest.com/demo/

步骤:

这里参考下 官方流程,前面的注册验证就不说了,直接重点

搭建geetest的后台

首先从Github: gt3-python-sdk下载.zip文件 ,用于后台搭建

  • gt3-java-sdk-master\src\sdk\GeetestLib.java  这个文件相当java中的实体类,直接放在我的domain文件下。
  • gt3-java-sdk-master\src\demo\demo1\GeetestConfig.java ,是geetest的配置文件,用来放我们在极验后台注册应用得到的captcha_id和private_key。
  • VerifyLoginServlet.java(验证) 和 StartCaptchaServlet.java(初始化),这两个文件就是两个servlet,我直接放到了我写的一个Controller里面;


import com.jhly.common.config.GeetestConfig;
import com.jhly.common.domain.GeetestLib;
import org.activiti.engine.impl.util.json.JSONException;
import org.activiti.engine.impl.util.json.JSONObject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;@Controller
@RequestMapping("/gt")
public class GeetestController {/*** 初始化极验** @param request* @param geetestDto* @param random    防止缓存* @return*/@GetMapping("/register")@ResponseBodyprotected void register(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {GeetestLib gtSdk = new GeetestLib(GeetestConfig.getGeetest_id(), GeetestConfig.getGeetest_key(),GeetestConfig.isnewfailback());String resStr = "{}";String userid = "test";//自定义参数,可选择添加HashMap<String, String> param = new HashMap<String, String>();param.put("user_id", userid); //网站用户idparam.put("client_type", "web"); //web:电脑上的浏览器;h5:手机上的浏览器,包括移动应用内完全内置的web_view;native:通过原生SDK植入APP应用的方式param.put("ip_address", "127.0.0.1"); //传输用户请求验证时所携带的IP//进行验证预处理int gtServerStatus = gtSdk.preProcess(param);//将服务器状态设置到session中request.getSession().setAttribute(gtSdk.gtServerStatusSessionKey, gtServerStatus);//将userid设置到session中request.getSession().setAttribute("userid", userid);resStr = gtSdk.getResponseStr();PrintWriter out = response.getWriter();out.println(resStr);}/*** 使用post方式,返回验证结果, request表单中必须包含challenge, validate, seccode*/@PostMapping("/validate")@ResponseBodyprotected void validate(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {GeetestLib gtSdk = new GeetestLib(GeetestConfig.getGeetest_id(), GeetestConfig.getGeetest_key(),GeetestConfig.isnewfailback());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中获取useridString userid = (String)request.getSession().getAttribute("userid");//自定义参数,可选择添加HashMap<String, String> param = new HashMap<String, String>();param.put("user_id", userid); //网站用户idparam.put("client_type", "web"); //web:电脑上的浏览器;h5:手机上的浏览器,包括移动应用内完全内置的web_view;native:通过原生SDK植入APP应用的方式param.put("ip_address", "127.0.0.1"); //传输用户请求验证时所携带的IPint 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) {// 验证成功PrintWriter out = response.getWriter();JSONObject data = new JSONObject();try {data.put("status", "success");data.put("version", gtSdk.getVersionInfo());} catch (JSONException e) {e.printStackTrace();}out.println(data.toString());}else {// 验证失败JSONObject data = new JSONObject();try {data.put("status", "fail");data.put("version", gtSdk.getVersionInfo());} catch (JSONException e) {e.printStackTrace();}PrintWriter out = response.getWriter();out.println(data.toString());}}}

待建geetest的前端

需要用到gt.js

我这里用的是 geetest 的bind类型。效果:https://www.geetest.com/demo/slide-bind.html

引入gt.js

<script src="gt.js"></script>

搭建容器,我是bind的一个btn

JavaScript

<script>var handler = function (captchaObj) {captchaObj.onReady(function () {$("#wait").hide();}).onSuccess(function () {var result = captchaObj.getValidate();if (!result) {return alert('请完成验证');}$.ajax({url: '/gt/validate',type: 'POST',dataType: 'json',data: {username: $('#username2').val(),password: $('#password2').val(),geetest_challenge: result.geetest_challenge,geetest_validate: result.geetest_validate,geetest_seccode: result.geetest_seccode},success: function (data) {if (data.status === 'success') {setTimeout(function () {//完成后发送验证码sendsms()// alert('登录成功');}, 1500);} else if (data.status === 'fail') {setTimeout(function () {alert('登录失败,请完成验证');captchaObj.reset();}, 1500);}}});});$("#hqyzm").click(function () {var phone = $('#bnzf-phone').val();  //获取输入的手机号码// $.Dialog.loading();var reg_phone = /^0?(13[0-9]|15[012356789]|18[0123456789]|14[57]|17[678]|170[059]|14[57]|166|19[89])[0-9]{8}$/;;if(!reg_phone.test(phone)){   //验证手机是否符合格式layer.msg("手机号格式不正确");return false;}// 调用之前先通过前端表单校验captchaObj.verify();})};$.ajax({url: "/gt/register?t=" + (new Date()).getTime(), // 加随机数防止缓存type: "get",dataType: "json",success: function (data) {// 调用 initGeetest 进行初始化// 参数1:配置参数// 参数2:回调,回调的第一个参数验证码对象,之后可以使用它调用相应的接口initGeetest({// 以下 4 个配置参数为必须,不能缺少gt: data.gt,challenge: data.challenge,offline: !data.success, // 表示用户后台检测极验服务器是否宕机new_captcha: data.new_captcha, // 用于宕机时表示是新验证码的宕机product: "bind", // 产品形式,包括:float,popupwidth: "300px",https: true}, handler);}});
</script>

效果:

geetest极验验证-java使用笔记相关推荐

  1. NUXT.JS使用GEETEST极验验证

    前言 公司新项目为PC版的,本人一直使用VUE,思考了很久最终决定使用nuxt.js完成该项目,因为是PC端可能涉及SEO,nuxt.js就是解决vue单页面SEO的,虽然之前没接触过,但是看了看文档 ...

  2. java项目极验验证_有关极验验证SDK的使用过程-Java版本

    在这里我会一步一步的实现极验验证配置到自己的项目上的详细过程(Java版本)! 首先,我们看一下我们要实现的预期效果: (1),打开服务器,进入到登陆页面 (2),点击提交按钮,进入验证界面 (3), ...

  3. 极验验证(滑动验证)的使用

    极验验证目录 一.样例 二.注册账号 三.获取ID 四.极验官方文档(参考) 五.SpringBoot集成极验 5.1.maven依赖(可能有些需要自己去导,个人的包依赖太多不好全部放上来,核心就这两 ...

  4. 更安全的验证方式-极验验证

    简介 极验验证是一种在计算机领域区分自然人和机器人的,通过简单集成的方式,为开发者提供安全.便捷的云端验证服务,与以往传统验证不同的是,极验通过分析用户完成拼图过程中的行为特征,通过数据分析来判断是人 ...

  5. geetest极验验证码使用

    一.服务端代码  1.去geetest官网注册并获取id和key 并引入新建geetestlib工具类 在github中clone出最新Demo项目,快速搭建本地应用: git clone https ...

  6. Spring Boot 极验验证滑动验证码

    概要 基于极验验证官网 java版gt3-java-sdk改编,使用Spring Boot 整合的极验滑动验证,包含form表单登录和ajax登录两种情况. 目录 注册账户获取ID和KEY Demo源 ...

  7. 【源码分析】极验验证官方SDK源码分析和实现思路

    前言 2016年就这么来了,新的一年,继续努力~ 最近,除了12306的验证码火起来以后,还有一个在界面上拖拽的验证码,也火了起来,就是这次要说的极验验证,在这个万众创新的时代,工具类产品能做到这样, ...

  8. 极验验证简介(待续)

    百度百科介绍: 极验验证是一种在计算机领域用于区分自然人和机器人的,通过简单集成的方式,为开发者提供安全.便捷的云端验证服务. 与以往传统验证码不同的是,极验通过分析用户完成拼图过程中的行为特征,通过 ...

  9. 极验验证--滑块验证

    极验验证–滑块验证 本文通过通过模拟登录极验网站,完成滑块验证 所用语言和相关模块 python3.6 selenium requests` PIL 极验验证码特点分析 极验验证是一种在计算机领域用于 ...

最新文章

  1. PHP--------解决网址URL编码问题
  2. 数据挖掘过程中:数据预处理
  3. Html转义字符列表
  4. python处理文本文件 提取英文单词看成一个整体_任意一个英文的纯文本文件,统计其中的单词出现的个数(shell python 两种语言实现)...
  5. java中解决脏读_多线程出现脏读以及解决方法(使用synchronized)
  6. python网络虫营销_python与sem,大数据降低竞价推广成本利器
  7. python 进位_蓝桥杯-Python-高精度加法
  8. ffmbc——为广播电视以及专业用途量身定制的FFmpeg
  9. 使用阿里云邮件推送服务架设自己邮件验证与推送体系
  10. 访问itunes store的时候提示网络连接超时的解决方案
  11. arduino下载库出错_关于程序下载到最后卡住了以及自带库不能用的问题!!
  12. 淘口令流量属于淘宝什么流量来源 如何用淘口令来刷流量
  13. 神临的 Unity shader 学习之多Pass渲染 (九)
  14. Word 公式编辑器: 公式居中,编号居右,带章节号自动更新,且可以交叉引用
  15. 人工智能(regex)—— 正则表达式
  16. 如何进行用户行为分析
  17. [机器学习] SSE,MSE,RMSE,R-square指标讲解
  18. 北京大学,南下布局!
  19. win10非分页缓冲池占用过大的解决方法
  20. 空间分析与应用实验报告实验一燕麦试验田选址

热门文章

  1. html canvas颜色渐变色,HTML5-画布(canvas)效果之-渐变色
  2. IBM RSA 建模:第 8 章可重用模型
  3. 如何告别“人工运维”,借助算法进行告警关联挖掘分析?
  4. React组件前端组件化开发
  5. 机器学习和特征工程理论与python代码实现 晓物智联
  6. 汽车百科系列之(九): 山路驾驶技术要点
  7. android收集备忘录恢复工具,手机小小备忘录数据恢复大问题轻松恢复文件看这里...
  8. 原生 和html5 性能,原生开发与HTML5开发的对比
  9. ipad越狱常用软件
  10. 2014年数学建模国赛A题(嫦娥三号软着陆轨道设计与控制策略)优秀论文.doc