新增人脸核身解密功能
This commit is contained in:
@@ -22,12 +22,11 @@ import com.ruoyi.system.service.ISysMenuService;
|
||||
|
||||
/**
|
||||
* 登录验证
|
||||
*
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
@RestController
|
||||
public class SysLoginController
|
||||
{
|
||||
public class SysLoginController {
|
||||
@Autowired
|
||||
private SysLoginService loginService;
|
||||
|
||||
@@ -37,40 +36,36 @@ public class SysLoginController
|
||||
@Autowired
|
||||
private SysPermissionService permissionService;
|
||||
@Autowired
|
||||
private IdentityAuthenticationService identityAuthenticationService;
|
||||
IdentityAuthenticationService identityAuthenticationService;
|
||||
|
||||
/**
|
||||
* 登录方法
|
||||
*
|
||||
*
|
||||
* @param loginBody 登录信息
|
||||
* @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;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户信息
|
||||
*
|
||||
*
|
||||
* @return 用户信息
|
||||
*/
|
||||
@GetMapping("getInfo")
|
||||
public AjaxResult getInfo()
|
||||
{
|
||||
public AjaxResult getInfo() {
|
||||
SysUser user = SecurityUtils.getLoginUser().getUser();
|
||||
// 角色集合
|
||||
Set<String> roles = permissionService.getRolePermission(user);
|
||||
@@ -85,12 +80,11 @@ 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));
|
||||
|
||||
+5
-19
@@ -3,7 +3,6 @@ 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;
|
||||
@@ -15,7 +14,7 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/identityAuthentication")
|
||||
public class IdentityAuthenticationController extends BaseController {
|
||||
public class IdentityAuthenticationController extends BaseController {
|
||||
@Autowired
|
||||
private IdentityAuthenticationService identityAuthenticationService;
|
||||
|
||||
@@ -23,8 +22,7 @@ public class IdentityAuthenticationController extends BaseController {
|
||||
* 获取EIDtoken
|
||||
*/
|
||||
@PostMapping("/selectIdentityAuthenticaEIDtoken")
|
||||
public AjaxResult selectIdentityAuthenticaEIDtoken()
|
||||
{
|
||||
public AjaxResult selectIdentityAuthenticaEIDtoken() {
|
||||
JSONObject tokenResult = identityAuthenticationService.selectIdentityAuthenticaEIDtoken();
|
||||
return success(tokenResult);
|
||||
}
|
||||
@@ -33,22 +31,10 @@ public class IdentityAuthenticationController extends BaseController {
|
||||
* 小程序人脸核身后查询身份认证结果
|
||||
*/
|
||||
@PostMapping("/selectIdentityAuthenticaRespon")
|
||||
public AjaxResult selectIdentityAuthenticaRespon(@Validated @RequestBody IdentityAuthentication ientityAuthentication)
|
||||
{
|
||||
// String username = this.getUsername();
|
||||
// Long userId = this.getUserId();
|
||||
// ientityAuthentication.setUserId(userId);
|
||||
// ientityAuthentication.setUserName(username);
|
||||
JSONObject checkResult = identityAuthenticationService.selectIdentityAuthenticaRespon( ientityAuthentication);
|
||||
return success(checkResult);
|
||||
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
|
||||
@@ -52,19 +52,19 @@
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-lang3</artifactId>
|
||||
</dependency>
|
||||
|
||||
|
||||
<!-- JSON工具类 -->
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.core</groupId>
|
||||
<artifactId>jackson-databind</artifactId>
|
||||
</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>
|
||||
@@ -144,7 +144,7 @@
|
||||
<artifactId>tencentcloud-sdk-java-faceid</artifactId>
|
||||
<version>3.1.875</version>
|
||||
</dependency>
|
||||
|
||||
<!--用户信息解密-->
|
||||
<dependency>
|
||||
<groupId>cn.hutool</groupId>
|
||||
<artifactId>hutool-all</artifactId>
|
||||
|
||||
+10
-1
@@ -1,6 +1,7 @@
|
||||
package com.ruoyi.wisdomarbitrate.service;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.ruoyi.common.core.domain.AjaxResult;
|
||||
import com.ruoyi.wisdomarbitrate.domain.IdentityAuthentication;
|
||||
|
||||
public interface IdentityAuthenticationService {
|
||||
@@ -8,6 +9,14 @@ public interface IdentityAuthenticationService {
|
||||
|
||||
IdentityAuthentication selectIdentityAuthentication(IdentityAuthentication identityAuthentication);
|
||||
|
||||
/**
|
||||
* 检查是否已经认证的用户
|
||||
*
|
||||
* @param identityAuthentication
|
||||
* @return
|
||||
*/
|
||||
String checkIsAuthentication(IdentityAuthentication identityAuthentication);
|
||||
|
||||
/**
|
||||
* 获取Eidtoken
|
||||
*
|
||||
@@ -21,5 +30,5 @@ public interface IdentityAuthenticationService {
|
||||
* @param ientityAuthentication
|
||||
* @return
|
||||
*/
|
||||
JSONObject selectIdentityAuthenticaRespon(IdentityAuthentication ientityAuthentication);
|
||||
AjaxResult selectIdentityAuthenticaRespon(IdentityAuthentication ientityAuthentication);
|
||||
}
|
||||
|
||||
+105
-6
@@ -1,10 +1,15 @@
|
||||
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.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.IdentityAuthenticationService;
|
||||
@@ -24,6 +29,8 @@ import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@Service
|
||||
public class IdentityAuthenticationServiceImpl implements IdentityAuthenticationService {
|
||||
|
||||
@@ -58,6 +65,27 @@ public class IdentityAuthenticationServiceImpl implements IdentityAuthentication
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查是否已经认证的用户
|
||||
*
|
||||
* @param identityAuthentication
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public String checkIsAuthentication(IdentityAuthentication identityAuthentication) {
|
||||
IdentityAuthentication identityAuthenticationselect = identityAuthenticationMapper.selectIdentityAuthentication(identityAuthentication);
|
||||
if (identityAuthenticationselect != null) {
|
||||
return "1";
|
||||
} else {
|
||||
return "0";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取EIDtoken
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public JSONObject selectIdentityAuthenticaEIDtoken() {
|
||||
JSONObject objJSON = new JSONObject();
|
||||
@@ -74,10 +102,10 @@ public class IdentityAuthenticationServiceImpl implements IdentityAuthentication
|
||||
FaceidClient client = new FaceidClient(cred, "", clientProfile);
|
||||
// 实例化一个请求对象,每个接口都会对应一个request对象
|
||||
GetEidTokenRequest req = new GetEidTokenRequest();
|
||||
req.setMerchantId(merchantId);
|
||||
// 返回的resp是一个GetEidTokenResponse的实例,与请求对象对应
|
||||
GetEidTokenResponse resp = client.GetEidToken(req);
|
||||
// 输出json格式的字符串回包
|
||||
System.out.println(GetEidTokenResponse.toJsonString(resp));
|
||||
String respJSON = GetEidTokenResponse.toJsonString(resp);
|
||||
objJSON = JSON.parseObject(respJSON);
|
||||
} catch (TencentCloudSDKException e) {
|
||||
@@ -87,9 +115,37 @@ public class IdentityAuthenticationServiceImpl implements IdentityAuthentication
|
||||
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 JSONObject selectIdentityAuthenticaRespon(IdentityAuthentication ientityAuthentication) {
|
||||
public AjaxResult selectIdentityAuthenticaRespon(IdentityAuthentication ientityAuthentication) {
|
||||
String eidToken = ientityAuthentication.getEidToken();
|
||||
|
||||
try {
|
||||
@@ -108,10 +164,53 @@ public class IdentityAuthenticationServiceImpl implements IdentityAuthentication
|
||||
// 返回的resp是一个GetEidResultResponse的实例,与请求对象对应
|
||||
GetEidResultResponse resp = client.GetEidResult(req);
|
||||
// 输出json格式的字符串回包
|
||||
System.out.println(GetEidResultResponse.toJsonString(resp));
|
||||
String s = GetEidResultResponse.toJsonString(resp);
|
||||
JSONObject object = JSON.parseObject(s);
|
||||
return object;
|
||||
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("认证记录新增失败");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
return AjaxResult.success();
|
||||
} catch (TencentCloudSDKException e) {
|
||||
System.out.println(e.toString());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user