springboot集成极验

可以去极验的官网下载demo:极验官网

进入官网之后点击技术文档:技术文档,之后点击行为验证的快速开始

github上下载极验的demo:git clone https://github.com/GeeTeam/gt3-java-sdk.git

极验的流程图如下:

极验流程图

1.首先上pom文件引入依赖

<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-core</artifactId>
			<version>2.9.4</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>2.9.4</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml.jackson.dataformat</groupId>
			<artifactId>jackson-dataformat-xml</artifactId>
			<version>2.9.4</version>
		</dependency>
	</dependencies>

 2.GeetestConfig类的配置

// 填入自己的captcha_id和private_key
private static final String geetest_id = "002bc30ff1eef93e912f45814945e752";
private static final String geetest_key = "4193a0e3247b82a26f563d595c447b1a";
private static final boolean newfailback = true;

public static final String getGeetest_id() {
	return geetest_id;
}

public static final String getGeetest_key() {
	return geetest_key;
}
	
public static final boolean isnewfailback() {
	return newfailback;
}

3.GeetestLib类(SDK)这个类不用我们去操心,这是极验官方提供的sdk工具给我们

4.PublicController(第一次验证需要获取参数的类,之前用的Servlet,我改成了一个接口)

import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Objects;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import cn.jsonXxxx.jyTest.config.GeetestConfig;
import cn.jsonXxxx.jyTest.sdk.GeetestLib;
import cn.jsonXxxx.jyTest.util.IpUtil;

@Controller
@RequestMapping("/public")
public class PublicController {

	@RequestMapping(value = "/register", method = RequestMethod.GET)
	@ResponseBody
	public void register(HttpServletRequest request, HttpServletResponse response) throws IOException {
		GeetestLib gtSdk = new GeetestLib(GeetestConfig.getGeetest_id(), GeetestConfig.getGeetest_key(),
				GeetestConfig.isnewfailback());
		String resStr = "{}";
		// 自定义userid
		HttpSession session = request.getSession();

		// User baseUser = (User) session.getAttribute("baseUser");

		// String userid = null;
		// if (Objects.nonNull(baseUser)) {
		// userid = baseUser.getUserName();
		// }
		// 自定义参数,可选择添加
		HashMap<String, String> param = new HashMap<String, String>();
		param.put("user_id", "username"); // 网站用户id
		param.put("ip_address", IpUtil.getIpAddr(request)); // 传输用户请求验证时所携带的IP

		// 进行验证预处理
		int gtServerStatus = gtSdk.preProcess(param);
		// 将服务器状态设置到session中
		request.getSession().setAttribute(gtSdk.gtServerStatusSessionKey, gtServerStatus);
		// 将userid设置到session中
		request.getSession().setAttribute("userid", "username");
		resStr = gtSdk.getResponseStr();
		PrintWriter out = response.getWriter();
		out.println(resStr);
	}
}

5.Verification二次验证的工具类, 抽取出来,可以再任何地方使用(注册,登陆,修改密码等)

import java.util.HashMap;
import java.util.Optional;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.jsonXxxx.jyTest.config.GeetestConfig;
import cn.jsonXxxx.jyTest.sdk.GeetestLib;

/**
 * 
 * @author jsonXxxx 极验第二次验证工具类
 */
public class Verification {

	public final static int SUCCESS = 1;
	public final static int FAIL = 0;

	public static int verification(HttpServletRequest request, HttpServletResponse response) {
		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状态

		Optional<Object> status = Optional.ofNullable(request).map(HttpServletRequest::getSession)
				.map(session -> session.getAttribute(gtSdk.gtServerStatusSessionKey));

		int gt_server_status_code = status.isPresent() ? (int) status.get() : 0;

		// int gt_server_status_code = (Integer)
		// request.getSession().getAttribute(gtSdk.gtServerStatusSessionKey);

		// 从session中获取userid
		String userid = (String) request.getSession().getAttribute("userid");

		// 自定义参数,可选择添加
		HashMap<String, String> param = new HashMap<String, String>();
		param.put("user_id", userid); // 网站用户id
		param.put("ip_address", IpUtil.getIpAddr(request)); // 传输用户请求验证时所携带的IP

		int gtResult = 0;

		if (gt_server_status_code == 1) {
			// gt-server正常,向gt-server进行二次验证
			gtResult = gtSdk.enhencedValidateRequest(challenge, validate, seccode, param);
		} else {
			// gt-server非正常情况下,进行failback模式验证
			gtResult = gtSdk.failbackValidateRequest(challenge, validate, seccode);
		}
		return gtResult;
	}
}

6.LoiginController测试接口

@RequestMapping("/login")
@Controller
public class LoginController {

	@RequestMapping("/test")
	@ResponseBody
	public void LoginTest(HttpServletRequest request, HttpServletResponse response) {
		// 返回的状态
        //修改成自己的业务
		int verification = Verification.verification(request, response);
		if (verification != Verification.SUCCESS) {
			return;
		}
	}
}

到此一次极验就算是完成了,附上完整的demo代码需要的同学可以去下载:https://github.com/zaizhongjian/jyTest

下载demo,启动之后,访问localhost:8080/login.html

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值