package cn.parkmanasys.geetest;
import java.awt.print.Printable;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.lang.reflect.GenericArrayType;
import java.net.HttpURLConnection;
import java.net.InetAddress;
import java.net.Socket;
import java.net.URL;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.logging.Logger;
import javax.print.DocFlavor.STRING;
import javax.servlet.descriptor.JspConfigDescriptor;
import javax.servlet.http.HttpServletRequest;
import javax.xml.crypto.Data;
import org.json.JSONException;
import org.json.JSONObject;
/**
* 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";
/**
* 带参数构造函数
*
* @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(HashMap<String, String> data) {
if (registerChallenge(data) != 1) {
this.responseStr = this.getFailPreProcessRes();
return 0;
}
return 1;
}
/**
* 用captchaID进行注册,更新challenge
*
* @return 1表示注册成功,0表示注册失败
*/
private int registerChallenge(HashMap<String, String>data) {
try {
String userId = data.get("user_id");
String clientType = data.get("client_type");
String ipAddress = data.get("ip_address");
String getUrl = apiUrl + registerUrl + "?";
String param = "gt=" + this.captchaId + "&json_format=" + this.json_format;
if (userId != null){
param = param + "&user_id=" + userId;
}
if (clientType != null){
param = param + "&client_type=" + clientType;
}
if (ipAddress != null){
param = param + "&ip_address=" + 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 = new JSONObject(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, HashMap<String, String> data) {
if (!resquestIsLegal(challenge, validate, seccode)) {
return 0;
}
gtlog("request legitimate");
String userId = data.get("user_id");
String clientType = data.get("client_type");
String ipAddress = data.get("ip_address");
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);
if (userId != null){
param = param + "&user_id=" + userId;
}
if (clientType != null){
param = param + "&client_type=" + clientType;
}
if (ipAddress != null){
param = param + "&ip_address=" + ipAddress;
}
gtlog("param:" + param);
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 = new JSONObject(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)
没有合适的资源?快使用搜索试试~ 我知道了~
ParkManagementSystem:(智能停车APP&智能车场)TSP智能共享平台(云端):包括了停车场相关所有管理
共1144个文件
gif:300个
java:197个
png:197个
5星 · 超过95%的资源 需积分: 50 11 下载量 177 浏览量
2021-03-11
21:48:54
上传
评论 2
收藏 11.74MB ZIP 举报
温馨提示
一·app端的登陆,人脸识别,修改信息等,需要后台的部署。后台是在Eclipse开发中,建议使用eclipse运行,同时下载Spring Boot插件完成项目的部署;部署后,后台的WebService也同时发布成功。。二·部署成功,访问三·用户在网页访问启动,表示的网络。四·车牌识别:点击应用程序的用户头像,再点击拍照,拍的照片会通过WebService传输到后台,通过WebSocket把识别的车牌发到页面。五·地址说明:在停车场帐户中main.jsp两个地址是摄像头的视频网址,用ip摄像头(一个app)实现项目的端口为8089,netty服务器用了9999; app调用WebService接口直接访问pc端的ip地址,定义为手机开景点给手机,确保位于同一网段。netty服务器和WebSocket的交互使用本地主机访问,则是同一台电脑打开。否则映射到外网。
资源详情
资源评论
资源推荐
收起资源包目录
ParkManagementSystem:(智能停车APP&智能车场)TSP智能共享平台(云端):包括了停车场相关所有管理 (1144个子文件)
mvnw.cmd 5KB
amazeui.min.css 249KB
toolkit.css 194KB
toppage.css 79KB
layui.css 58KB
layui.css 58KB
layui.css 58KB
font-awesome-ie7.min.css 37KB
font-awesome.css 37KB
font-awesome.css 37KB
app.css 36KB
layui.css 30KB
layui.css 30KB
font-awesome.min.css 30KB
font-awesome.min.css 30KB
base.css 23KB
iconfont.css 23KB
iconfont.css 23KB
font-awesome.min.css 22KB
_all.css 20KB
_all.css 20KB
global.css 19KB
global.css 19KB
layer.css 14KB
layer.css 14KB
_all.css 14KB
_all.css 14KB
layer.css 14KB
layer.css 14KB
_all.css 14KB
_all.css 14KB
_all.css 12KB
_all.css 12KB
layui.mobile.css 10KB
layui.mobile.css 10KB
chat.css 9KB
chat.css 9KB
laydate.css 8KB
laydate.css 8KB
layui.mobile.css 8KB
layui.mobile.css 8KB
laydate.css 7KB
laydate.css 7KB
demo.css 6KB
demo.css 6KB
admin.css 5KB
layout.css 4KB
layout.css 4KB
login.css 3KB
yellow.css 2KB
purple.css 2KB
yellow.css 2KB
purple.css 2KB
orange.css 2KB
orange.css 2KB
green.css 2KB
green.css 2KB
aero.css 2KB
blue.css 2KB
grey.css 2KB
pink.css 2KB
aero.css 2KB
blue.css 2KB
grey.css 2KB
pink.css 2KB
red.css 2KB
red.css 2KB
line.css 2KB
line.css 2KB
icheck.css 2KB
icheck.css 2KB
yellow.css 1KB
yellow.css 1KB
orange.css 1KB
purple.css 1KB
orange.css 1KB
purple.css 1KB
yellow.css 1KB
orange.css 1KB
purple.css 1KB
yellow.css 1KB
orange.css 1KB
purple.css 1KB
green.css 1KB
green.css 1KB
demo.css 1KB
green.css 1KB
green.css 1KB
aero.css 1KB
blue.css 1KB
aero.css 1KB
blue.css 1KB
grey.css 1KB
pink.css 1KB
grey.css 1KB
pink.css 1KB
aero.css 1KB
blue.css 1KB
grey.css 1KB
pink.css 1KB
共 1144 条
- 1
- 2
- 3
- 4
- 5
- 6
- 12
杜佳加
- 粉丝: 47
- 资源: 4625
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论1