文章目录

  • 0、使用阿里云,需要获取相应的信息
  • 1、导入依赖
  • 2、HttpUtils
  • 3、编写代码
  • 4、附:加密验证工具类

0、使用阿里云,需要获取相应的信息

appcode,这个需要注册阿里云然后找到Appcode,将其放入代码中即可,这里调用的第三方接口是身份证验证二要素(姓名+身份证)
注意:阿里云提供的这个身份证验证是有时间限制的,有效期应该是1年,自行查看

1、导入依赖

<!-- 身份证识别-->
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.15</version>
</dependency>
<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.2.1</version>
</dependency>
<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpcore</artifactId><version>4.2.1</version>
</dependency>
<dependency><groupId>commons-lang</groupId><artifactId>commons-lang</artifactId><version>2.6</version>
</dependency>
<dependency><groupId>org.eclipse.jetty</groupId><artifactId>jetty-util</artifactId><version>9.3.7.v20160115</version>
</dependency>

2、HttpUtils

package com.ww.yaodao.util;import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;import org.apache.commons.lang.StringUtils;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;public class HttpUtils {/*** get** @param host* @param path* @param method* @param headers* @param querys* @return* @throws Exception*/public static HttpResponse doGet(String host, String path, String method,Map<String, String> headers,Map<String, String> querys)throws Exception {HttpClient httpClient = wrapClient(host);HttpGet request = new HttpGet(buildUrl(host, path, querys));for (Map.Entry<String, String> e : headers.entrySet()) {request.addHeader(e.getKey(), e.getValue());}return httpClient.execute(request);}/*** post form** @param host* @param path* @param method* @param headers* @param querys* @param bodys* @return* @throws Exception*/public static HttpResponse doPost(String host, String path, String method,Map<String, String> headers,Map<String, String> querys,Map<String, String> bodys)throws Exception {HttpClient httpClient = wrapClient(host);HttpPost request = new HttpPost(buildUrl(host, path, querys));for (Map.Entry<String, String> e : headers.entrySet()) {request.addHeader(e.getKey(), e.getValue());}if (bodys != null) {List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>();for (String key : bodys.keySet()) {nameValuePairList.add(new BasicNameValuePair(key, bodys.get(key)));}UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(nameValuePairList, "utf-8");formEntity.setContentType("application/x-www-form-urlencoded; charset=UTF-8");request.setEntity(formEntity);}return httpClient.execute(request);}/*** Post String** @param host* @param path* @param method* @param headers* @param querys* @param body* @return* @throws Exception*/public static HttpResponse doPost(String host, String path, String method,Map<String, String> headers,Map<String, String> querys,String body)throws Exception {HttpClient httpClient = wrapClient(host);HttpPost request = new HttpPost(buildUrl(host, path, querys));for (Map.Entry<String, String> e : headers.entrySet()) {request.addHeader(e.getKey(), e.getValue());}if (StringUtils.isNotBlank(body)) {request.setEntity(new StringEntity(body, "utf-8"));}return httpClient.execute(request);}/*** Post stream** @param host* @param path* @param method* @param headers* @param querys* @param body* @return* @throws Exception*/public static HttpResponse doPost(String host, String path, String method,Map<String, String> headers,Map<String, String> querys,byte[] body)throws Exception {HttpClient httpClient = wrapClient(host);HttpPost request = new HttpPost(buildUrl(host, path, querys));for (Map.Entry<String, String> e : headers.entrySet()) {request.addHeader(e.getKey(), e.getValue());}if (body != null) {request.setEntity(new ByteArrayEntity(body));}return httpClient.execute(request);}/*** Put String* @param host* @param path* @param method* @param headers* @param querys* @param body* @return* @throws Exception*/public static HttpResponse doPut(String host, String path, String method,Map<String, String> headers,Map<String, String> querys,String body)throws Exception {HttpClient httpClient = wrapClient(host);HttpPut request = new HttpPut(buildUrl(host, path, querys));for (Map.Entry<String, String> e : headers.entrySet()) {request.addHeader(e.getKey(), e.getValue());}if (StringUtils.isNotBlank(body)) {request.setEntity(new StringEntity(body, "utf-8"));}return httpClient.execute(request);}/*** Put stream* @param host* @param path* @param method* @param headers* @param querys* @param body* @return* @throws Exception*/public static HttpResponse doPut(String host, String path, String method,Map<String, String> headers,Map<String, String> querys,byte[] body)throws Exception {HttpClient httpClient = wrapClient(host);HttpPut request = new HttpPut(buildUrl(host, path, querys));for (Map.Entry<String, String> e : headers.entrySet()) {request.addHeader(e.getKey(), e.getValue());}if (body != null) {request.setEntity(new ByteArrayEntity(body));}return httpClient.execute(request);}/*** Delete** @param host* @param path* @param method* @param headers* @param querys* @return* @throws Exception*/public static HttpResponse doDelete(String host, String path, String method,Map<String, String> headers,Map<String, String> querys)throws Exception {HttpClient httpClient = wrapClient(host);HttpDelete request = new HttpDelete(buildUrl(host, path, querys));for (Map.Entry<String, String> e : headers.entrySet()) {request.addHeader(e.getKey(), e.getValue());}return httpClient.execute(request);}private static String buildUrl(String host, String path, Map<String, String> querys) throws UnsupportedEncodingException {StringBuilder sbUrl = new StringBuilder();sbUrl.append(host);if (!StringUtils.isBlank(path)) {sbUrl.append(path);}if (null != querys) {StringBuilder sbQuery = new StringBuilder();for (Map.Entry<String, String> query : querys.entrySet()) {if (0 < sbQuery.length()) {sbQuery.append("&");}if (StringUtils.isBlank(query.getKey()) && !StringUtils.isBlank(query.getValue())) {sbQuery.append(query.getValue());}if (!StringUtils.isBlank(query.getKey())) {sbQuery.append(query.getKey());if (!StringUtils.isBlank(query.getValue())) {sbQuery.append("=");sbQuery.append(URLEncoder.encode(query.getValue(), "utf-8"));}}}if (0 < sbQuery.length()) {sbUrl.append("?").append(sbQuery);}}return sbUrl.toString();}private static HttpClient wrapClient(String host) {HttpClient httpClient = new DefaultHttpClient();if (host.startsWith("https://")) {sslClient(httpClient);}return httpClient;}private static void sslClient(HttpClient httpClient) {try {SSLContext ctx = SSLContext.getInstance("TLS");X509TrustManager tm = new X509TrustManager() {public X509Certificate[] getAcceptedIssuers() {return null;}public void checkClientTrusted(X509Certificate[] xcs, String str) {}public void checkServerTrusted(X509Certificate[] xcs, String str) {}};ctx.init(null, new TrustManager[] { tm }, null);SSLSocketFactory ssf = new SSLSocketFactory(ctx);ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);ClientConnectionManager ccm = httpClient.getConnectionManager();SchemeRegistry registry = ccm.getSchemeRegistry();registry.register(new Scheme("https", 443, ssf));} catch (KeyManagementException ex) {throw new RuntimeException(ex);} catch (NoSuchAlgorithmException ex) {throw new RuntimeException(ex);}}
}

3、编写代码

该代码是业务层也就是Service层,Controller层直接调用该方法即可
RegisterVO 为前端传递过来的数据,该数据存放在该RegisterVO 对象中,这里需要的是真实姓名和身份证号也就是下面代码中的idNo和name

 @Overridepublic int addOneUser(RegisterVO registerVO) {/** 重要提示如下:* HttpUtils请从* https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/src/main/java/com/aliyun/api/gateway/demo/util/HttpUtils.java* 下载** 相应的依赖请参照* https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/pom.xml*/String host = "https://idenauthen.market.alicloudapi.com";String path = "/idenAuthentication";String method = "POST";String appcode = "第0步中获取的appcode";Map<String, String> headers = new HashMap<String, String>();//最后在header中的格式(中间是英文空格)为Authorization:APPCODE 83359fd73fe94948385f570e3c139105headers.put("Authorization", "APPCODE " + appcode);//根据API的要求,定义相对应的Content-Typeheaders.put("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");Map<String, String> querys = new HashMap<String, String>();Map<String, String> bodys = new HashMap<String, String>();bodys.put("idNo", registerVO.getIdentifyCard());bodys.put("name", registerVO.getUsername());try {HttpResponse response =HttpUtils.doPost(host, path, method, headers, querys, bodys);if (response.getEntity() != null) {// 使用md5对密码、身份证进行加密registerVO.setPassword(PasswordUtils.generate(registerVO.getPassword()));registerVO.setIdentifyCard(PasswordUtils.generate(registerVO.getIdentifyCard()));// 糊涂工具类进行拷贝UserDO userDO = BeanUtil.copyProperties(registerVO, UserDO.class);userDO.setUtype(1);userDO.setAid(1);userDO.setPassword(md5Utils.getEncryptedPwd(registerVO.getPassword()));int insert = registerMapper.insert(userDO);return insert;}} catch (Exception e) {e.printStackTrace();}return 0;}
}

4、附:加密验证工具类

package com.ww.yaodao.util;import org.apache.commons.codec.binary.Hex;import java.security.MessageDigest;
import java.util.Random;/*** MD5加盐加密*/
public class PasswordUtils {/*** @param password : 密码明文* 生成含有随机盐的密码*/public static String generate(String password) {Random r = new Random();//sb盐值  16位StringBuilder sb = new StringBuilder(16);sb.append(r.nextInt(99999999)).append(r.nextInt(99999999));int len = sb.length();if (len < 16) {  //不够16位,前面补0for (int i = 0; i < 16 - len; i++) {sb.append("0");}}String salt = sb.toString();//密码明文 + 盐值   使用md5加密password = md5Hex(password + salt); //32位的16进制
//        byte[] hashedBytes = md5Hex(password+salt);char[] cs = new char[48];//往密文插入盐值for (int i = 0; i < 48; i += 3) {cs[i] = password.charAt(i / 3 * 2);  //0char c = salt.charAt(i / 3); //0cs[i + 1] = c;  //cs[1] = 盐值1cs[i + 2] = password.charAt(i / 3 * 2 + 1);}return new String(cs);}/*** 校验密码是否正确* @param password: 明文* @param md5: 数据库密文*           bae5e3208a3c700e3db642b6631e95b9*/public static boolean verify(String password, String md5) {char[] cs1 = new char[32];char[] cs2 = new char[16];for (int i = 0; i < 48; i += 3) {cs1[i / 3 * 2] = md5.charAt(i);cs1[i / 3 * 2 + 1] = md5.charAt(i + 2);cs2[i / 3] = md5.charAt(i + 1);}String salt = new String(cs2);// (明文+盐值) 密文  与密文比较return md5Hex(password + salt).equals(new String(cs1));}/*** 获取十六进制字符串形式的MD5摘要*/public static String md5Hex(String src) {try {//得到消息摘要对象MessageDigest md5 = MessageDigest.getInstance("MD5");//通过md5算法, 把src字符串, 加密成128位二进制byte[] bs = md5.digest(src.getBytes());//把128位二进制转换为16进账return new String(new Hex().encode(bs));} catch (Exception e) {return null;}}}

java-调用阿里身份证验证接口相关推荐

  1. java调用阿里云api发送短信验证服务

    1.先在maven构建需要的jar包 <dependency><groupId>com.aliyun</groupId><artifactId>aliy ...

  2. Java调用阿里云短信接口,发送短信

    Java调用阿里云短信接口,发送短信 1.短信服务这个很简单,只需要知道accessKeyId(AK).accessKeySecret(SK).短信签名.短信模板即可. 2.域名和产品名称是固定的,使 ...

  3. 通过AccessKey调用阿里云CDN接口刷新CDN资源案例

    通过AccessKey远程调用阿里云CDN接口,快速实现自动化集成部署. CdnService.java package com.nfky.cdn; import com.aliyuncs.Defau ...

  4. Java调用阿里云OSS下载文件

    1.准备工作 具体细节参考Java调用阿里云oss_迷途知返-的博客-CSDN博客_java使用阿里云oss. 2.项目需求 我这里只需要根据文件名称把文件从oss下载下来即可,参考阿里云官网指导:下 ...

  5. java调用第三方天气预报API接口

    java调用第三方天气预报API接口 package com.sensordata.controller; import com.common.json.JSONObject; import java ...

  6. java调用个人微信api接口实现收发消息发朋友圈

    个人微信api接口,java调用个人微信api接口实现收发消息发朋友圈 1.微信好友收发消息         /**      * 给微信好友发消息      * @author wechatno:t ...

  7. java调用个人微信API接口收发朋友圈,删除评论朋友圈

    java调用个人微信API接口收发朋友圈,删除评论朋友圈 /** * 发送朋友圈任务 * @author wechatno:tangjinjinwx * @param ctx * @param vo ...

  8. java对接阿里云实名认证接口

    今天在工作中用到了对用户进行实名认证的需求,完成需求后借着摸鱼的空闲,把实名认证进行总结,方便刚入行的小白学习与讨论. 认证四要素:姓名.身份证号.人像身份证照片.国徽身份证照片 目录 实名认证地址获 ...

  9. 使用java调用阿里云车牌识别API

    实现车牌识别功能我采用调用阿里云车牌识别API的方法,我使用的是eclipse,jdk 1.8,Tomcat 9.0 1.进入阿里云主页先创建阿里云账号 2.在控制台的头像那里找到AccessKey管 ...

最新文章

  1. httpclient工具类,post请求发送json字符串参数,中文乱码处理
  2. python之禅 中文_《Python之禅》中对于Python编程过程中的一些建议
  3. LeetCode Gas Station(双指针 )
  4. Python:操作文件
  5. const和readonly
  6. 你必须足够强大,这个世界才会更加公平
  7. c/c++ 字符串分割
  8. DNS服务器systemctl start named启动失败
  9. 学习笔记2---基本设置
  10. Python爬虫编程思想(92):项目实战:抓取京东图书评价
  11. dsm php virtualbox,私有云测试环境搭建 黑群晖 For VirtualBox(XPEnoboot 5022.3 DSM_DS3615xs_5022)...
  12. 摄像头各参数的意义_详解:监控摄像头参数介绍说明 | 58监控网
  13. 2009年毕业设计题目:网上自助装机系统的设计与实现
  14. python卡方检验计算pvalue值_如何用python计算临界值(critical value)和p值(p value)(scipy)...
  15. 百度开源深度学习平台Paddle
  16. The bussiness flow between DWM and ECC
  17. Github Action入门
  18. K线形态识别_双飞乌鸦
  19. 前端复习之HTML5
  20. 创建一个 PHP 程序来扫描主机名上的开放端口。

热门文章

  1. java程序会发生内存泄露吗及内存泄漏场景
  2. 计算机专业考编制怎么考,大学这5类专业更适合考编制,有你的专业吗?
  3. 计算机基础和组成原理——学习资料
  4. java.net.SocketException: Connection reset by peer: socket write error
  5. R 语言 因素分析(Factor Analysis, FA)
  6. python-nmap使用方法(python3)
  7. 计算机辅助英语听说考试系统,声通英语听说正式考试系统
  8. 在油猴脚本中添加css样式的方法
  9. antd pro使用iconfont
  10. AfterEffect(AE)插件-常规功能开发-创建面板-js脚本开发