package com.chentongwei.common.util.geetest;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;
/**
* @author TongWei.Chen 2017-6-4 11:37:56
* @Project tucaole
* @Description: Java SDK
*/
public class GeetestLib {
protected final String verName = "4.0";
protected final String sdkLang = "java";
protected final String apiUrl = "http://api.geetest.com";
protected final String registerUrl = "/register.php";
protected final String validateUrl = "/validate.php";
protected final String json_format = "1";
/**
* 极验验证二次验证表单数据 chllenge
*/
public static final String fn_geetest_challenge = "geetest_challenge";
/**
* 极验验证二次验证表单数据 validate
*/
public static final String fn_geetest_validate = "geetest_validate";
/**
* 极验验证二次验证表单数据 seccode
*/
public static final String fn_geetest_seccode = "geetest_seccode";
/**
* 公钥
*/
private String captchaId = "";
/**
* 私钥
*/
private String privateKey = "";
/**
* 是否开启新的failback
*/
private boolean newFailback = false;
/**
* 返回字符串
*/
private String responseStr = "";
/**
* 调试开关,是否输出调试日志
*/
public boolean debugCode = true;
/**
* 极验验证API服务状态Session Key
*/
public String gtServerStatusSessionKey = "gt_server_status";
/**
* 标记字段
*/
public String userId = "";
/**
* 标记验证模块所应用的终端类型
*/
public String clientType = "";
/**
* 标记用户请求验证时所携带的IP
*/
public String ipAddress = "";
/**
* 带参数构造函数
*
* @param captchaId
* @param privateKey
*/
public GeetestLib(String captchaId, String privateKey, boolean newFailback) {
this.captchaId = captchaId;
this.privateKey = privateKey;
this.newFailback = newFailback;
}
/**
* 获取本次验证初始化返回字符串
*
* @return 初始化结果
*/
public String getResponseStr() {
return responseStr;
}
public String getVersionInfo() {
return verName;
}
/**
* 预处理失败后的返回格式串
*
* @return
*/
private String getFailPreProcessRes() {
Long rnd1 = Math.round(Math.random() * 100);
Long rnd2 = Math.round(Math.random() * 100);
String md5Str1 = md5Encode(rnd1 + "");
String md5Str2 = md5Encode(rnd2 + "");
String challenge = md5Str1 + md5Str2.substring(0, 2);
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("success", 0);
jsonObject.put("gt", this.captchaId);
jsonObject.put("challenge", challenge);
jsonObject.put("new_captcha", this.newFailback);
} catch (JSONException e) {
gtlog("json dumps error");
}
return jsonObject.toString();
}
/**
* 预处理成功后的标准串
*
*/
private String getSuccessPreProcessRes(String challenge) {
gtlog("challenge:" + challenge);
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("success", 1);
jsonObject.put("gt", this.captchaId);
jsonObject.put("challenge", challenge);
} catch (JSONException e) {
gtlog("json dumps error");
}
return jsonObject.toString();
}
/**
* 验证初始化预处理
*
* @return 1表示初始化成功,0表示初始化失败
*/
public int preProcess() {
if (registerChallenge() != 1) {
this.responseStr = this.getFailPreProcessRes();
return 0;
}
return 1;
}
/**
* 验证初始化预处理
*
* @param userid
* @return 1表示初始化成功,0表示初始化失败
*/
public int preProcess(String userid){
this.userId = userid;
return this.preProcess();
}
/**
* 用captchaID进行注册,更新challenge
*
* @return 1表示注册成功,0表示注册失败
*/
private int registerChallenge() {
try {
String getUrl = apiUrl + registerUrl + "?";
String param = "gt=" + this.captchaId + "&json_format=" + this.json_format;
if (this.userId != ""){
param = param + "&user_id=" + this.userId;
this.userId = "";
}
if (this.clientType != ""){
param = param + "&client_type=" + this.clientType;
this.clientType = "";
}
if (this.ipAddress != ""){
param = param + "&ip_address=" + this.ipAddress;
this.ipAddress = "";
}
gtlog("GET_URL:" + getUrl + param);
String result_str = readContentFromGet(getUrl + param);
if (result_str == "fail"){
gtlog("gtServer register challenge failed");
return 0;
}
gtlog("result:" + result_str);
JSONObject jsonObject = JSONObject.parseObject(result_str);
String return_challenge = jsonObject.getString("challenge");
gtlog("return_challenge:" + return_challenge);
if (return_challenge.length() == 32) {
this.responseStr = this.getSuccessPreProcessRes(this.md5Encode(return_challenge + this.privateKey));
return 1;
}
else {
gtlog("gtServer register challenge error");
return 0;
}
} catch (Exception e) {
gtlog(e.toString());
gtlog("exception:register api");
}
return 0;
}
/**
* 判断一个表单对象值是否为空
*
* @param gtObj
* @return
*/
protected boolean objIsEmpty(Object gtObj) {
if (gtObj == null) {
return true;
}
if (gtObj.toString().trim().length() == 0) {
return true;
}
return false;
}
/**
* 检查客户端的请求是否合法,三个只要有一个为空,则判断不合法
*
* @param request
* @return
*/
private boolean resquestIsLegal(String challenge, String validate, String seccode) {
if (objIsEmpty(challenge)) {
return false;
}
if (objIsEmpty(validate)) {
return false;
}
if (objIsEmpty(seccode)) {
return false;
}
return true;
}
/**
* 服务正常的情况下使用的验证方式,向gt-server进行二次验证,获取验证结果
*
* @param challenge
* @param validate
* @param seccode
* @return 验证结果,1表示验证成功0表示验证失败
*/
public int enhencedValidateRequest(String challenge, String validate, String seccode) {
if (!resquestIsLegal(challenge, validate, seccode)) {
return 0;
}
gtlog("request legitimate");
String postUrl = this.apiUrl + this.validateUrl;
String param = String.format("challenge=%s&validate=%s&seccode=%s&json_format=%s",
challenge, validate, seccode, this.json_format);
String response = "";
try {
if (validate.length() <= 0) {
return 0;
}
if (!checkResultByPrivate(challenge, validate)) {
return 0;
}
gtlog("checkResultByPrivate");
response = readContentFromPost(postUrl, param);
gtlog("response: " + response);
} catch (Exception e) {
e.printStackTrace();
}
String return_seccode = "";
try {
JSONObject return_map = JSONObject.parseObject(response);
return_seccode = return_map.getString("seccode");
gtlog("md5: " + md5Encode(return_seccode));
if (return_seccode.equals(md5Encode(seccode))) {
return 1;
} else {
return 0;
}
} catch (JSONException e) {
gtlog("json load error");
return 0;
}
}
/**
* 服务正常的情况下使用的验证方式,向gt-server进行二次验证,获取验证结果
*
* @param challenge
* @param validate
* @param seccode
* @param userid
* @return 验证结果,1表示验证成功0表示验证失败
*/
public int enhencedValidateRequest(String challenge, String validate, String seccode, String userid) {
this.use
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
该项目为“tucaole”社区吐槽平台,采用Java和HTML技术进行设计,源码包含241个文件,其中192个为Java源文件,29个为XML配置文件,7个为Markdown文档,7个为属性文件,3个为HTML页面,以及少量其他类型的文件。该平台提供了一个自由吐槽的空间,允许用户分享和讨论各种琐事。
资源推荐
资源详情
资源评论
收起资源包目录
基于Java和HTML的“tucaole”社区吐槽平台设计源码 (241个子文件)
application.properties.bak 3KB
.gitignore 191B
forget-password-template.html 954B
update-email-template.html 939B
regist-template.html 789B
GeetestLib.java 12KB
UserBiz.java 12KB
UserController.java 9KB
ArticleBiz.java 8KB
UserMailBiz.java 8KB
RedisEnum.java 6KB
ArticleFavoriteBiz.java 6KB
ArticleSupportBiz.java 6KB
ArticleCommentBiz.java 6KB
MailBiz.java 5KB
FollowBiz.java 4KB
SysLogInterceptor.java 3KB
QQLoginController.java 3KB
Aop.java 3KB
ArticleController.java 3KB
RedisTask.java 3KB
ExceptionResolver.java 3KB
ESCreateTemplate.java 3KB
ArticleFavoriteController.java 3KB
BasicCacheImpl.java 3KB
CommonExceptionUtil.java 3KB
SetCacheImpl.java 3KB
ReportBiz.java 3KB
TestESCreateController.java 3KB
HashCacheImpl.java 2KB
MD5Util.java 2KB
ZSetCacheImpl.java 2KB
ResultCreator.java 2KB
IUserDAO.java 2KB
Application.java 2KB
ListCacheImpl.java 2KB
Article.java 2KB
GeetestController.java 2KB
UploadBiz.java 2KB
CsdnWeeklyDocumentAnalyzer.java 2KB
ReadCountQueue.java 2KB
UserExceptionUtil.java 2KB
InitRegionBiz.java 2KB
FollowController.java 2KB
DateUtil.java 2KB
ReadCountBiz.java 2KB
CorsFilter.java 1KB
ArticleSupportController.java 1KB
User.java 1KB
UserMsgEnum.java 1KB
ArticleCommentController.java 1KB
InitDataController.java 1KB
IArticleFavoriteDAO.java 1KB
UserVO.java 1KB
IArticleDAO.java 1KB
IBasicCache.java 1KB
ElasticsearchClientFactory.java 1KB
IFollowDAO.java 1KB
ESDeleteTemplate.java 1KB
CommonBiz.java 1KB
InitArticleCatalogBiz.java 1KB
BaiduBKWeeklyDocumentAnalyzer.java 1KB
InitReportTypeBiz.java 1KB
IArticleFavoriteLinkDAO.java 1KB
CollectionUtil.java 1KB
ReportController.java 1KB
ResponseEnum.java 1KB
GeetestConstant.java 1KB
TypeValidator.java 1KB
ArticleServiceImpl.java 1KB
IListCache.java 1KB
ArticleCommentListVO.java 1KB
BaiDuBaiKeServiceImpl.java 1KB
ReportTypeBiz.java 1018B
ArticleSpider.java 1017B
UserDetailVO.java 1014B
ArticleCatalogBiz.java 1012B
ISetCache.java 1007B
Page.java 1002B
IZSetCache.java 998B
RegionBiz.java 979B
Article.java 974B
SysLogBiz.java 968B
UserTask.java 957B
RegistUserIO.java 883B
IHashCache.java 870B
ArticleFavoriteMsgEnum.java 863B
BaseSpringBootTest.java 863B
Report.java 862B
ArticleDetailVO.java 856B
ArticleListVO.java 853B
ArticleCommentSaveIO.java 848B
IPUtil.java 846B
TestESCreateTemplate.java 841B
TucaoArticleTask.java 837B
ArticleSaveIO.java 835B
InitES.java 830B
ArticleCatalogController.java 823B
IReportDAO.java 819B
TestESDeleteController.java 818B
共 241 条
- 1
- 2
- 3
资源评论
wjs2024
- 粉丝: 2369
- 资源: 5533
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 环境监测系统源代码全套技术资料.zip
- 前端分析-2023071100789
- 前端分析-2023071100789
- 基于springboot的调查问卷管理系统源代码全套技术资料.zip
- MATLAB代码:计及碳排放交易及多种需求响应的微网 电厂日前优化调度 关键词:碳排放交易 需求响应 空调负荷 电动汽车 微网 电厂优化调度 参考文档:计及电动汽车和需求响应的多类电力市场下
- 全国高校计算机能力挑战赛往届真题整理
- 小程序毕业设计项目-音乐播放器
- MATLAB代码:考虑多微网电能互补与需求响应的微网双层优化模型 关键词:多微网 电能互补 需求响应 双层优化 动态定价 能量管理 参考文档:《自编文档》 仿真平台:MATLAB+CPLEX 主要
- 智慧校园后勤管理系统源代码全套技术资料.zip
- MATLAB代码:含多种需求响应及电动汽车的微网 电厂日前优化调度 关键词:需求响应 空调负荷 电动汽车 微网优化调度 电厂调度 仿真平台:MATLAB+CPLEX 主要内容:代码主要做的是一
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功