|
@@ -1,7 +1,11 @@
|
|
|
package com.ktg.framework.web.service;
|
|
package com.ktg.framework.web.service;
|
|
|
|
|
|
|
|
|
|
+import cn.hutool.core.lang.Assert;
|
|
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.ktg.common.constant.Constants;
|
|
import com.ktg.common.constant.Constants;
|
|
|
|
|
+import com.ktg.common.core.domain.AjaxResult;
|
|
|
import com.ktg.common.core.domain.entity.SysUser;
|
|
import com.ktg.common.core.domain.entity.SysUser;
|
|
|
|
|
+import com.ktg.common.core.domain.model.FingerprintLoginBody;
|
|
|
import com.ktg.common.core.domain.model.LoginBody;
|
|
import com.ktg.common.core.domain.model.LoginBody;
|
|
|
import com.ktg.common.core.domain.model.LoginUser;
|
|
import com.ktg.common.core.domain.model.LoginUser;
|
|
|
import com.ktg.common.core.redis.RedisCache;
|
|
import com.ktg.common.core.redis.RedisCache;
|
|
@@ -9,14 +13,14 @@ import com.ktg.common.exception.ServiceException;
|
|
|
import com.ktg.common.exception.user.CaptchaException;
|
|
import com.ktg.common.exception.user.CaptchaException;
|
|
|
import com.ktg.common.exception.user.CaptchaExpireException;
|
|
import com.ktg.common.exception.user.CaptchaExpireException;
|
|
|
import com.ktg.common.exception.user.UserPasswordNotMatchException;
|
|
import com.ktg.common.exception.user.UserPasswordNotMatchException;
|
|
|
-import com.ktg.common.utils.DateUtils;
|
|
|
|
|
-import com.ktg.common.utils.MessageUtils;
|
|
|
|
|
-import com.ktg.common.utils.ServletUtils;
|
|
|
|
|
-import com.ktg.common.utils.StringUtils;
|
|
|
|
|
|
|
+import com.ktg.common.utils.*;
|
|
|
import com.ktg.common.utils.ip.IpUtils;
|
|
import com.ktg.common.utils.ip.IpUtils;
|
|
|
|
|
+import com.ktg.common.vo.VerificationVO;
|
|
|
import com.ktg.framework.manager.AsyncManager;
|
|
import com.ktg.framework.manager.AsyncManager;
|
|
|
import com.ktg.framework.manager.factory.AsyncFactory;
|
|
import com.ktg.framework.manager.factory.AsyncFactory;
|
|
|
|
|
+import com.ktg.system.domain.SysUserCharacteristic;
|
|
|
import com.ktg.system.service.ISysConfigService;
|
|
import com.ktg.system.service.ISysConfigService;
|
|
|
|
|
+import com.ktg.system.service.ISysUserCharacteristicService;
|
|
|
import com.ktg.system.service.ISysUserOnlineService;
|
|
import com.ktg.system.service.ISysUserOnlineService;
|
|
|
import com.ktg.system.service.ISysUserService;
|
|
import com.ktg.system.service.ISysUserService;
|
|
|
import io.jsonwebtoken.Claims;
|
|
import io.jsonwebtoken.Claims;
|
|
@@ -31,8 +35,12 @@ import org.springframework.security.core.authority.AuthorityUtils;
|
|
|
import org.springframework.security.core.context.SecurityContextHolder;
|
|
import org.springframework.security.core.context.SecurityContextHolder;
|
|
|
import org.springframework.security.core.userdetails.UserDetails;
|
|
import org.springframework.security.core.userdetails.UserDetails;
|
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
+import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
import javax.annotation.Resource;
|
|
|
|
|
+import java.util.HashSet;
|
|
|
|
|
+import java.util.List;
|
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 登录校验方法
|
|
* 登录校验方法
|
|
@@ -58,6 +66,10 @@ public class SysLoginService {
|
|
|
// 令牌秘钥
|
|
// 令牌秘钥
|
|
|
@Value("${token.secret}")
|
|
@Value("${token.secret}")
|
|
|
private String secret;
|
|
private String secret;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private ISysUserService iSysUserService;
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private ISysUserCharacteristicService iSysUserCharacteristicService;
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -186,4 +198,50 @@ public class SysLoginService {
|
|
|
redisCache.setCacheObject(Constants.CABINET_LOGIN_TOKEN_KEY + loginBody.getUsername(), token);
|
|
redisCache.setCacheObject(Constants.CABINET_LOGIN_TOKEN_KEY + loginBody.getUsername(), token);
|
|
|
return token;
|
|
return token;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ public AjaxResult loginByFingerprint(FingerprintLoginBody loginBody) {
|
|
|
|
|
+ Assert.notBlank(loginBody.getInputImg(), "输入的指纹不能为空!");
|
|
|
|
|
+ // 获取所有的用户指纹
|
|
|
|
|
+ List<SysUserCharacteristic> list = iSysUserCharacteristicService.list(Wrappers.<SysUserCharacteristic>lambdaQuery()
|
|
|
|
|
+ .eq(SysUserCharacteristic::getType, "0"));
|
|
|
|
|
+ Assert.isFalse(list.isEmpty(), "指纹库中暂无您的指纹信息!");
|
|
|
|
|
+ List<String> collect = list.stream().map(SysUserCharacteristic::getContent).collect(Collectors.toList());
|
|
|
|
|
+ // 通过指纹获取最相似的用户
|
|
|
|
|
+ VerificationVO verificationVO = FingerprintComparisonByImg.completableFutureComparison(loginBody.getInputImg(), new HashSet<>(collect));
|
|
|
|
|
+ Assert.notNull(verificationVO, "无法根据指纹确定您的身份,请通过其它方式登录!");
|
|
|
|
|
+ String fingerprintImg = verificationVO.getFingerprintImg();
|
|
|
|
|
+ SysUserCharacteristic one = iSysUserCharacteristicService.getOne(Wrappers.<SysUserCharacteristic>lambdaQuery()
|
|
|
|
|
+ .eq(SysUserCharacteristic::getContent, fingerprintImg));
|
|
|
|
|
+ SysUser sysUser = iSysUserService.getById(one.getUserId());
|
|
|
|
|
+ // 生成令牌
|
|
|
|
|
+ AjaxResult ajax = AjaxResult.success();
|
|
|
|
|
+ String token = loginWithoutPassword(sysUser);
|
|
|
|
|
+ ajax.put(Constants.TOKEN, token);
|
|
|
|
|
+ ajax.put("nickName", sysUser.getNickName());
|
|
|
|
|
+ return ajax;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public AjaxResult loginByFingerprintDat(MultipartFile file) {
|
|
|
|
|
+ Assert.isTrue(file.getSize() > 0, "输入的指纹不能为空!");
|
|
|
|
|
+ // 获取所有的用户指纹
|
|
|
|
|
+ List<SysUserCharacteristic> list = iSysUserCharacteristicService.list(Wrappers.<SysUserCharacteristic>lambdaQuery()
|
|
|
|
|
+ .eq(SysUserCharacteristic::getType, "1"));
|
|
|
|
|
+ Assert.isFalse(list.isEmpty(), "指纹库中暂无您的指纹信息!");
|
|
|
|
|
+ List<String> collect = list.stream().map(SysUserCharacteristic::getContent).collect(Collectors.toList());
|
|
|
|
|
+ // 通过指纹获取最相似的用户
|
|
|
|
|
+ VerificationVO verificationVO = FingerprintComparisonByDat.completableFutureComparison(file, new HashSet<>(collect));
|
|
|
|
|
+ Assert.notNull(verificationVO, "无法根据指纹确定您的身份,请通过其它方式登录!");
|
|
|
|
|
+ String fingerprint = verificationVO.getFingerprint();
|
|
|
|
|
+ SysUserCharacteristic one = iSysUserCharacteristicService.getOne(Wrappers.<SysUserCharacteristic>lambdaQuery()
|
|
|
|
|
+ .eq(SysUserCharacteristic::getContent, fingerprint));
|
|
|
|
|
+ SysUser sysUser = iSysUserService.getById(one.getUserId());
|
|
|
|
|
+ // 生成令牌
|
|
|
|
|
+ AjaxResult ajax = AjaxResult.success();
|
|
|
|
|
+ String token = loginWithoutPassword(sysUser);
|
|
|
|
|
+ ajax.put(Constants.TOKEN, token);
|
|
|
|
|
+ ajax.put("nickName", sysUser.getNickName());
|
|
|
|
|
+ return ajax;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
}
|
|
}
|