Merge branch 'bgy' of SH-Arbitrate/Arbitrate-Backend into dev

This commit was merged in pull request #60.
This commit is contained in:
bgy
2023-10-11 18:13:17 +08:00
committed by Gitea
6 changed files with 208 additions and 142 deletions
@@ -26,8 +26,7 @@ import com.ruoyi.system.service.ISysMenuService;
* @author ruoyi
*/
@RestController
public class SysLoginController
{
public class SysLoginController {
@Autowired
private SysLoginService loginService;
@@ -37,7 +36,7 @@ public class SysLoginController
@Autowired
private SysPermissionService permissionService;
@Autowired
private IdentityAuthenticationService identityAuthenticationService;
IdentityAuthenticationService identityAuthenticationService;
/**
* 登录方法
@@ -46,20 +45,17 @@ public class SysLoginController
* @return 结果
*/
@PostMapping("/login")
public AjaxResult login(@RequestBody LoginBody loginBody)
{
public AjaxResult login(@RequestBody LoginBody loginBody) {
AjaxResult ajax = AjaxResult.success();
// 生成令牌
String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
loginBody.getUuid());
ajax.put(Constants.TOKEN, token);
// IdentityAuthentication identityAuthentication = new IdentityAuthentication();
// identityAuthentication.setUserName(loginBody.getUsername());
// IdentityAuthentication identityAuthenticationselect = identityAuthenticationService.selectIdentityAuthentication(identityAuthentication);
// ajax.put("certificationStatusName", identityAuthenticationselect.getCertificationStatusName());
// ajax.put("certificationStatus", identityAuthenticationselect.getCertificationStatus());
//判断该用户是否已经实名认证(certificationStatus1已认证0未认证)
IdentityAuthentication identityAuthentication=new IdentityAuthentication();
identityAuthentication.setUserName(loginBody.getUsername());
String status = identityAuthenticationService.checkIsAuthentication(identityAuthentication);
ajax.put("certificationStatus", status);
return ajax;
}
@@ -69,8 +65,7 @@ public class SysLoginController
* @return 用户信息
*/
@GetMapping("getInfo")
public AjaxResult getInfo()
{
public AjaxResult getInfo() {
SysUser user = SecurityUtils.getLoginUser().getUser();
// 角色集合
Set<String> roles = permissionService.getRolePermission(user);
@@ -89,8 +84,7 @@ public class SysLoginController
* @return 路由信息
*/
@GetMapping("getRouters")
public AjaxResult getRouters()
{
public AjaxResult getRouters() {
Long userId = SecurityUtils.getUserId();
List<SysMenu> menus = menuService.selectMenuTreeByUserId(userId);
return AjaxResult.success(menuService.buildMenus(menus));
@@ -1,8 +1,8 @@
package com.ruoyi.web.controller.wisdomarbitrate;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.wisdomarbitrate.domain.CaseApplication;
import com.ruoyi.wisdomarbitrate.domain.IdentityAuthentication;
import com.ruoyi.wisdomarbitrate.service.IdentityAuthenticationService;
import org.springframework.beans.factory.annotation.Autowired;
@@ -14,40 +14,27 @@ import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/identityAuthentication")
public class IdentityAuthenticationController extends BaseController {
public class IdentityAuthenticationController extends BaseController {
@Autowired
private IdentityAuthenticationService identityAuthenticationService;
/**
* 查询身份认证EIDtoken
* 获取EIDtoken
*/
@PostMapping("/selectIdentityAuthenticaEIDtoken")
public AjaxResult selectIdentityAuthenticaEIDtoken()
{
IdentityAuthentication ientityAuthentication = identityAuthenticationService.selectIdentityAuthenticaEIDtoken();
return success(ientityAuthentication);
public AjaxResult selectIdentityAuthenticaEIDtoken() {
JSONObject tokenResult = identityAuthenticationService.selectIdentityAuthenticaEIDtoken();
return success(tokenResult);
}
/**
* 查询身份认证结果
* 小程序人脸核身后查询身份认证结果
*/
@PostMapping("/selectIdentityAuthenticaRespon")
public AjaxResult selectIdentityAuthenticaRespon(@Validated @RequestBody IdentityAuthentication ientityAuthentication)
{
String username = this.getUsername();
Long userId = this.getUserId();
ientityAuthentication.setUserId(userId);
ientityAuthentication.setUserName(username);
IdentityAuthentication ientityAuthenticationRes = identityAuthenticationService.selectIdentityAuthenticaRespon( ientityAuthentication);
return success(ientityAuthenticationRes);
public AjaxResult selectIdentityAuthenticaRespon(@Validated @RequestBody IdentityAuthentication ientityAuthentication) {
AjaxResult checkResult = identityAuthenticationService.selectIdentityAuthenticaRespon(ientityAuthentication);
return checkResult;
}
}
@@ -166,4 +166,4 @@ identityAuthentication:
credentialSecretId: AKID3xfHgroY4MQHvLXUXMwIQL1UjmbBX1Tv
credentialSecretKey: INDrIXcT8YmomZBcsy0oNirnU0LTN4X7
merchantId: 0NSJ2309281116194321
privateKeyHexDecodeinfo: MHcCAQEEIEw7MRv3uYlpmU6Fko4GlXSh6Vd38k0cUQZ5zDwvRg+voAoGCCqBHM9VAYItoUQDQgAEUdxIAWhGg4LUXf1GoPdb8XMbGudpexPQCuaaRi9BCnNbpaF1kcwRhhsBKvop9ZmW/nOz4wQ1r/iIEOrc9qCXgQ==
privateKeyHexDecodeinfo: 4c3b311bf7b98969994e85928e069574a1e95777f24d1c510679cc3c2f460faf
+8 -8
View File
@@ -60,11 +60,11 @@
</dependency>
<!-- 动态数据源 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
<!-- 阿里JSON解析器 -->
<dependency>
@@ -136,15 +136,15 @@
<dependency>
<groupId>com.tencentcloudapi</groupId>
<artifactId>tencentcloud-sdk-java</artifactId>
<version>3.1.270</version>
<version>3.1.876</version>
</dependency>
<dependency>
<groupId>com.tencentcloudapi</groupId>
<artifactId>tencentcloud-sdk-java-faceid</artifactId>
<version>3.1.871</version>
<version>3.1.875</version>
</dependency>
<!--用户信息解密-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
@@ -1,15 +1,34 @@
package com.ruoyi.wisdomarbitrate.service;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.wisdomarbitrate.domain.IdentityAuthentication;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
public interface IdentityAuthenticationService {
IdentityAuthentication selectIdentityAuthentication(IdentityAuthentication identityAuthentication);
IdentityAuthentication selectIdentityAuthentication(IdentityAuthentication identityAuthentication);
/**
* 检查是否已经认证的用户
*
* @param identityAuthentication
* @return
*/
String checkIsAuthentication(IdentityAuthentication identityAuthentication);
IdentityAuthentication selectIdentityAuthenticaEIDtoken();
/**
* 获取Eidtoken
*
* @return
*/
JSONObject selectIdentityAuthenticaEIDtoken();
IdentityAuthentication selectIdentityAuthenticaRespon(IdentityAuthentication ientityAuthentication);
/**
* 小程序人脸核身后查询身份认证结果
*
* @param ientityAuthentication
* @return
*/
AjaxResult selectIdentityAuthenticaRespon(IdentityAuthentication ientityAuthentication);
}
@@ -1,27 +1,27 @@
package com.ruoyi.wisdomarbitrate.service.impl;
import cn.hutool.core.codec.Base64;
import cn.hutool.crypto.SmUtil;
import cn.hutool.crypto.asymmetric.SM2;
import cn.hutool.crypto.symmetric.SymmetricCrypto;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.exceptions.TradeException;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.wisdomarbitrate.domain.IdentityAuthentication;
import com.ruoyi.wisdomarbitrate.mapper.IdentityAuthenticationMapper;
import com.ruoyi.wisdomarbitrate.service.ICaseApplicationService;
import com.ruoyi.wisdomarbitrate.service.IdentityAuthenticationService;
import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
import com.tencentcloudapi.common.profile.ClientProfile;
import com.tencentcloudapi.common.profile.HttpProfile;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
import com.tencentcloudapi.faceid.v20180301.FaceidClient;
import com.tencentcloudapi.faceid.v20180301.models.*;
import com.tencentcloudapi.faceid.v20180301.models.GetEidResultRequest;
import com.tencentcloudapi.faceid.v20180301.models.GetEidResultResponse;
import com.tencentcloudapi.faceid.v20180301.models.GetEidTokenRequest;
import com.tencentcloudapi.faceid.v20180301.models.GetEidTokenResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -29,15 +29,10 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;
import java.util.Date;
@Service
public class IdentityAuthenticationServiceImpl implements IdentityAuthenticationService {
public class IdentityAuthenticationServiceImpl implements IdentityAuthenticationService {
@Value("${identityAuthentication.credentialSecretId}")
private String credentialSecretId;
@@ -58,9 +53,9 @@ public class IdentityAuthenticationServiceImpl implements IdentityAuthenticatio
@Override
public IdentityAuthentication selectIdentityAuthentication(IdentityAuthentication identityAuthentication) {
IdentityAuthentication identityAuthenticationselect = identityAuthenticationMapper.selectIdentityAuthentication(identityAuthentication);
if(identityAuthenticationselect!=null){
if (identityAuthenticationselect != null) {
identityAuthenticationselect.setCertificationStatusName("已身份认证");
}else {
} else {
IdentityAuthentication identityAuthenticationselectnew = new IdentityAuthentication();
identityAuthenticationselectnew.setCertificationStatusName("未身份认证");
identityAuthenticationselectnew.setCertificationStatus(0);
@@ -70,86 +65,157 @@ public class IdentityAuthenticationServiceImpl implements IdentityAuthenticatio
}
/**
* 检查是否已经认证的用户
*
* @param identityAuthentication
* @return
*/
@Override
public IdentityAuthentication selectIdentityAuthenticaEIDtoken() {
IdentityAuthentication identityAuthentication = new IdentityAuthentication();
try{
Credential authenti = new Credential(credentialSecretId, credentialSecretKey);
HttpProfile httpProfileIdenAuth = new HttpProfile();
httpProfileIdenAuth.setEndpoint("faceid.tencentcloudapi.com");
ClientProfile clientInv= new ClientProfile();
clientInv.setHttpProfile(httpProfileIdenAuth);
FaceidClient clientIdenAuth = new FaceidClient(authenti, "", clientInv);
// 实例化一个请求对象
GetEidTokenRequest reqest = new GetEidTokenRequest();
//设置请求参数
reqest.setMerchantId(merchantId);
GetEidTokenResponse respIdenAuth = clientIdenAuth.GetEidToken(reqest);
String respJSON = GetEidTokenResponse.toJsonString(respIdenAuth);
JSONObject objJSON = JSON.parseObject(respJSON);
String eidToken = objJSON.getString("EidToken");
String requestId = objJSON.getString("RequestId");
identityAuthentication.setEidToken(eidToken);
}catch (TencentCloudSDKException e) {
log.error("获取Eidtoke异常:", e);
throw new RuntimeException("获取Eidtoke异常");
public String checkIsAuthentication(IdentityAuthentication identityAuthentication) {
IdentityAuthentication identityAuthenticationselect = identityAuthenticationMapper.selectIdentityAuthentication(identityAuthentication);
if (identityAuthenticationselect != null) {
return "1";
} else {
return "0";
}
return identityAuthentication;
}
/**
* 获取EIDtoken
*
* @return
*/
@Override
public JSONObject selectIdentityAuthenticaEIDtoken() {
JSONObject objJSON = new JSONObject();
objJSON.put("EidToken", "");
try {
Credential cred = new Credential(credentialSecretId, credentialSecretKey);
// 实例化一个http选项,可选的,没有特殊需求可以跳过
HttpProfile httpProfile = new HttpProfile();
httpProfile.setEndpoint("faceid.tencentcloudapi.com");
// 实例化一个client选项,可选的,没有特殊需求可以跳过
ClientProfile clientProfile = new ClientProfile();
clientProfile.setHttpProfile(httpProfile);
// 实例化要请求产品的client对象,clientProfile是可选的
FaceidClient client = new FaceidClient(cred, "", clientProfile);
// 实例化一个请求对象,每个接口都会对应一个request对象
GetEidTokenRequest req = new GetEidTokenRequest();
req.setMerchantId(merchantId);
// 返回的resp是一个GetEidTokenResponse的实例,与请求对象对应
GetEidTokenResponse resp = client.GetEidToken(req);
// 输出json格式的字符串回包
String respJSON = GetEidTokenResponse.toJsonString(resp);
objJSON = JSON.parseObject(respJSON);
} catch (TencentCloudSDKException e) {
System.out.println(e.toString());
System.out.println("获取Eidtoken失败");
}
return objJSON;
}
/**
* 解密用户信息
*/
public JSONObject DecodeUserInfo(String deskey, String userInfo) {
JSONObject parse = null;
try {
byte[] desKeyBytes = Base64.decode(deskey);
final SM2 sm2 = new SM2(privateKeyHexDecodeinfo, null, null);
sm2.usePlainEncoding();
byte[] sm4KeyBytes = sm2.decrypt(desKeyBytes);
SymmetricCrypto sm4 = SmUtil.sm4(sm4KeyBytes);
byte[] plaintext = sm4.decrypt(Base64.decode(userInfo));
if (plaintext != null && plaintext.length > 0) {
String s = new String(plaintext);
parse = JSON.parseObject(s);
}
} catch (Exception e) {
System.out.println(e.toString());
}
return parse;
}
/**
* 小程序人脸核身后查询身份认证结果
*
* @param ientityAuthentication
* @return
*/
@Override
@Transactional
public IdentityAuthentication selectIdentityAuthenticaRespon(IdentityAuthentication ientityAuthentication) {
public AjaxResult selectIdentityAuthenticaRespon(IdentityAuthentication ientityAuthentication) {
String eidToken = ientityAuthentication.getEidToken();
Long userId = ientityAuthentication.getUserId();
String userName = ientityAuthentication.getUserName();
IdentityAuthentication IdentityAuthenticationRespon = new IdentityAuthentication();
IdentityAuthentication IdentityAuthenticationResult = new IdentityAuthentication();
if(StringUtils.isNotEmpty(eidToken)){
try{
Credential authenti = new Credential(credentialSecretId, credentialSecretKey);
HttpProfile httpProfileIdenAuth = new HttpProfile();
httpProfileIdenAuth.setEndpoint("faceid.tencentcloudapi.com");
ClientProfile clientInv= new ClientProfile();
clientInv.setHttpProfile(httpProfileIdenAuth);
FaceidClient clientIdenAuth = new FaceidClient(authenti, "", clientInv);
// 实例化一个请求对象
GetEidResultRequest reqest = new GetEidResultRequest();
//设置请求参数
reqest.setEidToken(eidToken);
// reqest.setInfoType("1");
// reqest.setInfoType("13");
// reqest.setInfoType("2");
try {
Credential cred = new Credential(credentialSecretId, credentialSecretKey);
// 实例化一个http选项,可选的,没有特殊需求可以跳过
HttpProfile httpProfile = new HttpProfile();
httpProfile.setEndpoint("faceid.tencentcloudapi.com");
// 实例化一个client选项,可选的,没有特殊需求可以跳过
ClientProfile clientProfile = new ClientProfile();
clientProfile.setHttpProfile(httpProfile);
// 实例化要请求产品的client对象,clientProfile是可选的
FaceidClient client = new FaceidClient(cred, "", clientProfile);
// 实例化一个请求对象,每个接口都会对应一个request对象
GetEidResultRequest req = new GetEidResultRequest();
req.setEidToken(eidToken);
// 返回的resp是一个GetEidResultResponse的实例,与请求对象对应
GetEidResultResponse resp = client.GetEidResult(req);
// 输出json格式的字符串回包
String s = GetEidResultResponse.toJsonString(resp);
JSONObject objJSON = JSON.parseObject(s);
//查看是否核验成功
JSONObject text = objJSON.getJSONObject("Text");
if (text != null) {
Integer comparestatus = text.getInteger("Comparestatus");
if (comparestatus != null && comparestatus == 0) {
JSONObject eidInfo = objJSON.getJSONObject("EidInfo");
if (eidInfo != null) {
String desKey = eidInfo.getString("DesKey");
String userInfo = eidInfo.getString("UserInfo");
//1.解密用户的信息
JSONObject info = DecodeUserInfo(desKey, userInfo);
if (info != null) {
String idcardno = info.getString("idnum");
String name = info.getString("name");
//2.在用户认证表中插入用户认证记录
LoginUser loginUser = SecurityUtils.getLoginUser();
IdentityAuthentication authentication = new IdentityAuthentication();
/**
* 用户名
* 用户名id
* 姓名
* 身份证号
* 认证时间
* 认证状态0表示成功
* 请求id
*/
authentication.setUserName(loginUser.getUsername());
authentication.setUserId(loginUser.getUserId());
authentication.setName(name);
authentication.setIdentityNo(idcardno);
authentication.setCertificationTime(new Date());
authentication.setCertificationStatus(0);
authentication.setRequestId(objJSON.getString("RequestId"));
try {
identityAuthenticationMapper.insertIdentityAuthentication(authentication);
} catch (Exception e) {
System.out.println("认证记录新增失败");
}
//获得身份认证结果
GetEidResultResponse respIdenAuth = clientIdenAuth.GetEidResult(reqest);
String respJSON = GetEidResultResponse.toJsonString(respIdenAuth);
JSONObject objJSON = JSON.parseObject(respJSON);
IdentityAuthenticationRespon.setCertificationStatus(1);
IdentityAuthenticationRespon.setUserName(userName);
IdentityAuthenticationRespon.setUserId(userId);
}
JSONObject objEidInfo = JSON.parseObject(objJSON.getString("EidInfo"));
// identityAuthenticationMapper.insertIdentityAuthentication(IdentityAuthenticationRespon);
IdentityAuthenticationResult.setCertificationStatus(1);
IdentityAuthenticationResult.setCertificationStatusName("认证成功");
} catch (TencentCloudSDKException e) {
log.error("认证失败:", e);
throw new RuntimeException("认证失败");
}
}
}
return AjaxResult.success();
} catch (TencentCloudSDKException e) {
System.out.println(e.toString());
}
return IdentityAuthenticationResult;
return null;
}
}