实名认证相关

main
rong.liu 12 months ago
parent 0318f7181b
commit f3a746481c
  1. 15
      pom.xml
  2. 40
      users/src/main/java/com/huoran/users/config/AliRealNameAuthenticationConfig.java
  3. 111
      users/src/main/java/com/huoran/users/controller/AliRealNameAuthenticationController.java
  4. 63
      users/src/main/java/com/huoran/users/controller/UserAuthenticationInformationController.java
  5. 87
      users/src/main/java/com/huoran/users/entity/UserAuthenticationInformation.java
  6. 17
      users/src/main/java/com/huoran/users/entity/req/IdCardOCRReq.java
  7. 70
      users/src/main/java/com/huoran/users/entity/res/IdCardOCRResp.java
  8. 42
      users/src/main/java/com/huoran/users/entity/res/RealNameAuthenticationResp.java
  9. 16
      users/src/main/java/com/huoran/users/mapper/UserAuthenticationInformationMapper.java
  10. 5
      users/src/main/java/com/huoran/users/mapper/xml/UserAuthenticationInformationMapper.xml
  11. 16
      users/src/main/java/com/huoran/users/service/UserAuthenticationInformationService.java
  12. 20
      users/src/main/java/com/huoran/users/service/impl/UserAuthenticationInformationServiceImpl.java
  13. 148
      users/src/main/java/com/huoran/users/utils/ali/FaceRecognitionAidUtil.java
  14. 313
      users/src/main/java/com/huoran/users/utils/ali/HttpUtils.java
  15. 10
      users/src/test/java/com/huoran/users/test/CodeGenerator.java

@ -59,11 +59,26 @@
<quartz.version>2.3.2</quartz.version> <quartz.version>2.3.2</quartz.version>
<okhttp.version>3.2.0</okhttp.version> <okhttp.version>3.2.0</okhttp.version>
<okio.version>1.14.0</okio.version> <okio.version>1.14.0</okio.version>
<aliyun-java-sdk-core.version>4.5.5</aliyun-java-sdk-core.version>
</properties> </properties>
<dependencyManagement> <dependencyManagement>
<dependencies> <dependencies>
<!-- 阿里实名认证 -->
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>${aliyun-java-sdk-core.version}</version>
</dependency>
<dependency> <dependency>
<groupId>com.squareup.okhttp3</groupId> <groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId> <artifactId>okhttp</artifactId>

@ -0,0 +1,40 @@
package com.huoran.users.config;
import org.apache.commons.codec.binary.Base64;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class AliRealNameAuthenticationConfig {
public static final String ALI_API_HOST = "https://cardnumber.market.alicloudapi.com";
public static final String ALI_API_PATH = "/rest/160601/ocr/ocr_idcard.json";
public static final String ALI_API_APPCODE = "4c22c2b34b2d4b5aaa57186a49aa3a4c";
public static final String ALI_IDCHECK_HOST = "https://sxidcheck.market.alicloudapi.com";
public static final String ALI_IDCHECK_PATH = "/idcard/check";
public static final String GET_APP_CODE_LINK = "https://idenauthen.market.alicloudapi.com/idenAuthentication";
public static Map<String, String> buildHeaders() {
Map<String, String> headers = new HashMap<>();
headers.put("Authorization", "APPCODE " + ALI_API_APPCODE);
headers.put("Content-Type", "application/json; charset=UTF-8");
return headers;
}
public static String imgBase64(MultipartFile file) {
String imgBase64 = "";
try {
byte[] content = file.getBytes();
imgBase64 = new String(Base64.encodeBase64(content));
} catch (IOException e) {
e.printStackTrace();
}
return imgBase64;
}
}

@ -0,0 +1,111 @@
package com.huoran.users.controller;
import com.google.gson.Gson;
import com.huoran.common.response.R;
import com.huoran.common.utils.TokenUtils;
import com.huoran.users.config.AliRealNameAuthenticationConfig;
import com.huoran.users.entity.UserAuthenticationInformation;
import com.huoran.users.entity.req.IdCardOCRReq;
import com.huoran.users.entity.res.IdCardOCRResp;
import com.huoran.users.entity.res.RealNameAuthenticationResp;
import com.huoran.users.service.UserAuthenticationInformationService;
import com.huoran.users.utils.ali.FaceRecognitionAidUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.Optional;
@Api(value = "小程序-实名认证", tags = "小程序-实名认证")
@RestController
@RequestMapping("/users/autonym")
public class AliRealNameAuthenticationController {
//实名认证实现类
@Autowired
public UserAuthenticationInformationService service;
@ApiOperation(value = "身份证图片验证(对象)")
@PostMapping("/faceAuthenticationByObject")
public R faceAuthenticationByObject(HttpServletRequest request, @RequestBody IdCardOCRReq req) throws IOException {
//正面身份证信息返回
String positiveIDReturnsInformation = FaceRecognitionAidUtil.IdCardOCRRecognition(req.getTheFrontOfIDCard(),"face");
//反面身份证信息返回
String reverseIDInformationReturned = FaceRecognitionAidUtil.IdCardOCRRecognition(req.getReverseOfIDCard(),"back");
/*if (ObjectUtils.isEmpty(positiveIDReturnsInformation)&&ObjectUtils.isEmpty(reverseIDInformationReturned)){
throw new RuntimeException("身份证图片验证失败,请重新再试!");
}*/
Optional.ofNullable(positiveIDReturnsInformation)
.orElseThrow(() -> new RuntimeException("身份证图片验证失败,请重新再试!"));
Optional.ofNullable(reverseIDInformationReturned)
.orElseThrow(() -> new RuntimeException("身份证图片验证失败,请重新再试!"));
IdCardOCRResp front = new Gson().fromJson(positiveIDReturnsInformation, IdCardOCRResp.class);
IdCardOCRResp reverseSide = new Gson().fromJson(reverseIDInformationReturned, IdCardOCRResp.class);
return R.ok().put("front", front).put("reverseSide", reverseSide);
}
@ApiOperation(value = "身份证图片验证")
@PostMapping("/faceAuthentication")
public R faceAuthentication(@RequestParam(name = "imgFile", required = true) @ApiParam(value = "图片url") String imgFile ,
@RequestParam(name = "side", required = true) @ApiParam(value = "身份证正反面类型:face/back") String side)throws IOException {
//身份证信息返回
String idCardInformationReturn = FaceRecognitionAidUtil.IdCardOCRRecognition(imgFile,side);
if (ObjectUtils.isEmpty(idCardInformationReturn)){
throw new RuntimeException("身份证图片验证失败,请重新再试!");
}
IdCardOCRResp resp = new Gson().fromJson(idCardInformationReturn, IdCardOCRResp.class);
if (resp.getSuccess()){
return R.ok().put("data", resp);
}else {
throw new RuntimeException("身份证图片验证失败,请重新再试!");
}
}
@PostMapping("/realNameAuthentication")
@ApiOperation(value = "输入身份证号码、姓名进行实名认证且添加认证信息", response = UserAuthenticationInformation.class)
public R realNameAuthentication(@RequestBody @ApiParam(name = "用户实名认证信息记录对象", value = "传入json格式", required = true) UserAuthenticationInformation userAuthenticationInformation, HttpServletRequest request) throws IOException {
String accountId = TokenUtils.getIdByJwtToken(request);
userAuthenticationInformation.setAccountId(Integer.valueOf(accountId));
String json = FaceRecognitionAidUtil.postData(AliRealNameAuthenticationConfig.ALI_API_APPCODE,
AliRealNameAuthenticationConfig.GET_APP_CODE_LINK, userAuthenticationInformation.getRealName(), userAuthenticationInformation.getIdCardNo());
RealNameAuthenticationResp info = new Gson().fromJson(json, RealNameAuthenticationResp.class);
if (!info.getRespCode().equals("0000")) {
throw new RuntimeException(info.getRespMessage());
}
boolean addState = service.save(userAuthenticationInformation);
return addState ? R.ok() : R.error("认证失败");
}
/*@ApiOperation(value = "输入身份证号码、姓名进行实名认证")
@PostMapping("/realNameAuthentication")
public R realNameAuthentication(@RequestParam(name = "idCardNo", required = true) @ApiParam(value = "身份证号码") String idCardNo, @RequestParam(name = "userName", required = true) @ApiParam(value = "用户姓名") String userName, HttpServletRequest request) throws IOException {
String accountId = TokenUtils.getIdByJwtToken(request);
String json = FaceRecognitionAidUtil.postData(AliRealNameAuthenticationConfig.ALI_API_APPCODE, AliRealNameAuthenticationConfig.GET_APP_CODE_LINK, userName, idCardNo);
RealNameAuthenticationResp info = new Gson().fromJson(json, RealNameAuthenticationResp.class);
if (!info.getRespCode().equals("0000")) {
throw new RuntimeException(info.getRespMessage());
}
return R.ok().put("data", info);
}*/
}

@ -0,0 +1,63 @@
package com.huoran.users.controller;
import com.huoran.api.UserClient;
import com.huoran.common.response.R;
import com.huoran.common.utils.TokenUtils;
import com.huoran.users.entity.UserAuthenticationInformation;
import com.huoran.users.service.UserAuthenticationInformationService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
* @描述用户实名认证信息记录控制类
* @作者: Rong
* @日期: 2023-12-14
*/
@RestController
@RequestMapping("/userAuthenticationInformation")
@Api(value = "用户实名认证信息记录:UserAuthenticationInformationController", tags = "用户实名认证信息记录")
public class UserAuthenticationInformationController {
@Autowired
public UserAuthenticationInformationService service;
@Autowired
private UserClient userClient;
@PostMapping("/findById")
@ApiOperation(value = "查询详情", response = UserAuthenticationInformation.class)
public R findById(@ApiParam(name = "id", value = "主键", required = true) @RequestParam Integer id) {
UserAuthenticationInformation userAuthenticationInformation = service.getById(id);
return R.ok().put("data", userAuthenticationInformation);
}
@PostMapping("/save")
@ApiOperation(value = "新增", response = UserAuthenticationInformation.class)
public R save(@RequestBody @ApiParam(name = "用户实名认证信息记录对象", value = "传入json格式", required = true) UserAuthenticationInformation userAuthenticationInformation, HttpServletRequest request) {
String accountId = TokenUtils.getIdByJwtToken(request);
Integer schoolId = userClient.getSchoolIdByAccountId(accountId);
userAuthenticationInformation.setAccountId(Integer.valueOf(accountId));
boolean addState = service.save(userAuthenticationInformation);
return addState ? R.ok() : R.error("新增失败");
}
@PostMapping("/batchDeletion")
@ApiOperation(value = "批量删除", response = UserAuthenticationInformation.class)
public R batchDeletion(@ApiParam(name = "ids", value = "主键", required = true) @RequestBody List<Integer> ids) {
boolean delState = service.removeByIds(ids);
return delState ? R.ok() : R.error("删除失败");
}
}

@ -0,0 +1,87 @@
package com.huoran.users.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* <p>
* 用户实名认证信息记录
* </p>
*
* @author chen
* @since 2023-12-14
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("hr_user_authentication_information")
@ApiModel(value="UserAuthenticationInformation对象", description="用户实名认证信息记录")
public class UserAuthenticationInformation implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "主键")
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@ApiModelProperty(value = "账号id")
private Integer accountId;
@ApiModelProperty(value = "姓名")
private String realName;
@ApiModelProperty(value = "身份证号码")
private String idCardNo;
@ApiModelProperty(value = "生日")
private Date birthday;
@ApiModelProperty(value = "年龄")
private Integer age;
@ApiModelProperty(value = "性别")
private String sex;
@ApiModelProperty(value = "省")
private String province;
@ApiModelProperty(value = "市")
private String city;
@ApiModelProperty(value = "县")
private String county;
@ApiModelProperty(value = "地址信息")
private String address;
@ApiModelProperty(value = "民族")
private String nationality;
@ApiModelProperty(value = "有效期起始时间")
private Date startDate;
@ApiModelProperty(value = "有效期结束时间")
private Date endDate;
@ApiModelProperty(value = "签发机关")
private String issue;
@ApiModelProperty(value = "身份证正面图片地址")
private String frontOfIdCard;
@ApiModelProperty(value = "身份证反面图片地址")
private String reverseOfIdCard;
@ApiModelProperty(value = "实名认证的时间")
private Date realNameAuthenticationTime;
}

@ -0,0 +1,17 @@
package com.huoran.users.entity.req;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "身份证上传请求参数")
public class IdCardOCRReq {
@ApiModelProperty(value = "身份证正面")
private String theFrontOfIDCard;
@ApiModelProperty(value = "身份证反面")
private String reverseOfIDCard;
}

@ -0,0 +1,70 @@
package com.huoran.users.entity.res;
import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "身份证OCR文件识别")
public class IdCardOCRResp {
@ApiModelProperty(value = "地址信息")
private String address;
@ApiModelProperty(value = "用户姓名")
private String name;
@ApiModelProperty(value = "身份证号码")
private String num;
@ApiModelProperty(value = "民族")
private String nationality;
@ApiModelProperty(value = "配置信息,同输入configure")
private String config_str;
@ApiModelProperty(value = "返回信息")
private String respMessage;
@ApiModelProperty(value = "返回错误码")
private String respCode;
@ApiModelProperty(value = "省")
private String province;
@ApiModelProperty(value = "市")
private String city;
@ApiModelProperty(value = "县/区")
private String county;
@ApiModelProperty(value = "生日")
private String birth;
@ApiModelProperty(value = "性别")
private String sex;
@ApiModelProperty(value = "年龄")
private String age;
@ApiModelProperty(value = "是否是复印件")
private String is_fake;
@ApiModelProperty(value = "有效期起始时间")
private String start_date;
@ApiModelProperty(value = "有效期结束时间")
private String end_date;
@ApiModelProperty(value = "签发机关")
private String issue;
//使用@JsonIgnore注解,忽略此属性,前端不会拿到该属性
@JsonIgnore
@ApiModelProperty(value = "识别结果,true表示成功,false表示失败")
private Boolean success;
}

@ -0,0 +1,42 @@
package com.huoran.users.entity.res;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel(value = "实名认证返回的信息")
public class RealNameAuthenticationResp {
@ApiModelProperty(value = "用户姓名")
private String name;
@ApiModelProperty(value = "身份证号码")
private String idNo;
@ApiModelProperty(value = "返回信息")
private String respMessage;
@ApiModelProperty(value = "返回错误码")
private String respCode;
@ApiModelProperty(value = "省")
private String province;
@ApiModelProperty(value = "市")
private String city;
@ApiModelProperty(value = "县/区")
private String county;
@ApiModelProperty(value = "生日")
private String birthday;
@ApiModelProperty(value = "性别")
private String sex;
@ApiModelProperty(value = "年龄")
private String age;
}

@ -0,0 +1,16 @@
package com.huoran.users.mapper;
import com.huoran.users.entity.UserAuthenticationInformation;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 用户实名认证信息记录 Mapper 接口
* </p>
*
* @author chen
* @since 2023-12-14
*/
public interface UserAuthenticationInformationMapper extends BaseMapper<UserAuthenticationInformation> {
}

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.huoran.users.mapper.UserAuthenticationInformationMapper">
</mapper>

@ -0,0 +1,16 @@
package com.huoran.users.service;
import com.huoran.users.entity.UserAuthenticationInformation;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 用户实名认证信息记录 服务类
* </p>
*
* @author chen
* @since 2023-12-14
*/
public interface UserAuthenticationInformationService extends IService<UserAuthenticationInformation> {
}

@ -0,0 +1,20 @@
package com.huoran.users.service.impl;
import com.huoran.users.entity.UserAuthenticationInformation;
import com.huoran.users.mapper.UserAuthenticationInformationMapper;
import com.huoran.users.service.UserAuthenticationInformationService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 用户实名认证信息记录 服务实现类
* </p>
*
* @author chen
* @since 2023-12-14
*/
@Service
public class UserAuthenticationInformationServiceImpl extends ServiceImpl<UserAuthenticationInformationMapper, UserAuthenticationInformation> implements UserAuthenticationInformationService {
}

@ -0,0 +1,148 @@
package com.huoran.users.utils.ali;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.nacos.client.identify.Base64;
import com.huoran.users.config.AliRealNameAuthenticationConfig;
import okhttp3.*;
import org.apache.http.HttpResponse;
import org.apache.http.util.EntityUtils;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class FaceRecognitionAidUtil {
public static String postData(String appCode, String url, String name, String idNo) throws IOException {
String result = "";
RequestBody formBody = new FormBody.Builder().add("name", name).add("idNo", idNo).build();
Request request = new Request.Builder().url(url).addHeader("Authorization", "APPCODE " + appCode).post(formBody).build();
Call call = new OkHttpClient().newCall(request);
Response response = null;
try {
response = call.execute();
} catch (IOException e) {
System.out.println("execute failed, message:" + e.getMessage());
}
assert response != null;
if (!response.isSuccessful()) {
// 状态码为403时一般是套餐包用尽,需续购;注意:续购不会改变秘钥(appCode),仅增加次数
// 续购链接:https://market.aliyun.com/products/57000002/cmapi025518.html
System.out.println("request failed----" + "返回状态码" + response.code() + ",message:" + response.message());
}
result = response.body().string(); //此处不可以使用toString()方法,该方法已过期
return result;
}
public static JSONObject checkIdcard(Object idcard, Object name) {
JSONObject result = new JSONObject();
Map<String, String> querys = new HashMap<>();
querys.put("idCard", idcard.toString());
querys.put("name", name.toString());
try {
HttpResponse response = HttpUtils.doPost(AliRealNameAuthenticationConfig.ALI_IDCHECK_HOST, AliRealNameAuthenticationConfig.ALI_IDCHECK_PATH, "POST", AliRealNameAuthenticationConfig.buildHeaders(), querys, new HashMap<>() // No need to pass an empty map for bodys
);
int stat = response.getStatusLine().getStatusCode();
if (stat == 200) {
String res = EntityUtils.toString(response.getEntity());
result = JSON.parseObject(res);
} else {
result.put("error", "Http code: " + stat);
result.put("message", EntityUtils.toString(response.getEntity()));
}
} catch (Exception e) {
result.put("error", "实名认证检测失败");
result.put("message", e.getMessage());
// 记录错误而不仅仅打印堆栈跟踪
e.printStackTrace();
}
System.out.println(result);
return result;
}
public static String img_base64(String path) {
/**
* 对path进行判断如果是本地文件就二进制读取并base64编码如果是url,则返回
*/
String imgBase64="";
if (path.startsWith("http")){
imgBase64 = path;
}else {
try {
File file = new File(path);
byte[] content = new byte[(int) file.length()];
FileInputStream finputstream = new FileInputStream(file);
finputstream.read(content);
finputstream.close();
imgBase64 = new String(Base64.encodeBase64(content));
} catch (IOException e) {
e.printStackTrace();
return imgBase64;
}
}
return imgBase64;
}
public static String IdCardOCRRecognition(String imgFile,String side){
String method = "POST";
Map<String, String> headers = new HashMap<String, String>();
//最后在header中的格式(中间是英文空格)为Authorization:APPCODE 83359fd73fe94948385f570e3c139105
headers.put("Authorization", "APPCODE " + AliRealNameAuthenticationConfig.ALI_API_APPCODE);
//根据API的要求,定义相对应的Content-Type
headers.put("Content-Type", "application/json; charset=UTF-8");
Map<String, String> querys = new HashMap<String, String>();
// 对图像进行base64编码
String imgBase64 = FaceRecognitionAidUtil.img_base64(imgFile);
//configure配置
JSONObject configObj = new JSONObject();
// configObj.put("side", "face");
configObj.put("side", side);
String config_str = configObj.toString();
// 拼装请求body的json字符串
JSONObject requestObj = new JSONObject();
requestObj.put("image", imgBase64);
if (configObj.size() > 0) {
requestObj.put("configure", config_str);
}
String bodys = requestObj.toString();
try {
HttpResponse response = HttpUtils.doPost(AliRealNameAuthenticationConfig.ALI_API_HOST, AliRealNameAuthenticationConfig.ALI_API_PATH, method, headers, querys, bodys);
int stat = response.getStatusLine().getStatusCode();
if (stat != 200) {
System.out.println("Http code: " + stat);
System.out.println("http header error msg: " + response.getFirstHeader("X-Ca-Error-Message"));
System.out.println("Http body error msg:" + EntityUtils.toString(response.getEntity()));
}
String res = EntityUtils.toString(response.getEntity());
/* JSONObject res_obj = JSON.parseObject(res);
System.out.println(res_obj.toJSONString());*/
return res;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}

@ -0,0 +1,313 @@
package com.huoran.users.utils.ali;
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;
@SuppressWarnings("deprecation")
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);
}
}
}

@ -42,10 +42,10 @@ public class CodeGenerator {
// 3、数据源配置 // 3、数据源配置
DataSourceConfig dsc = new DataSourceConfig(); DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://rm-wz9y13wf7u8q8610fwo.mysql.rds.aliyuncs.com:3308/nakadai?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8"); dsc.setUrl("jdbc:mysql://121.37.12.51:3308/nakadai?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8");
dsc.setDriverName("com.mysql.cj.jdbc.Driver"); dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("super"); dsc.setUsername("root");
dsc.setPassword("huoran888"); dsc.setPassword("root");
dsc.setDbType(DbType.MYSQL); dsc.setDbType(DbType.MYSQL);
mpg.setDataSource(dsc); mpg.setDataSource(dsc);
@ -62,9 +62,9 @@ public class CodeGenerator {
// 5、策略配置 // 5、策略配置
StrategyConfig strategy = new StrategyConfig(); StrategyConfig strategy = new StrategyConfig();
strategy.setInclude("acl_permission","acl_role","acl_role_permission","acl_user_role"); strategy.setInclude("hr_user_authentication_information");
strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略 strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略
strategy.setTablePrefix("acl_"); //生成实体时去掉表前缀 strategy.setTablePrefix("hr_"); //生成实体时去掉表前缀
strategy.setColumnNaming(NamingStrategy.underline_to_camel);//数据库表字段映射到实体的命名策略 strategy.setColumnNaming(NamingStrategy.underline_to_camel);//数据库表字段映射到实体的命名策略
strategy.setEntityLombokModel(true); // lombok 模型 @Accessors(chain = true) setter链式操作 strategy.setEntityLombokModel(true); // lombok 模型 @Accessors(chain = true) setter链式操作

Loading…
Cancel
Save