This commit is contained in:
sxu 2025-01-27 15:06:39 +08:00
parent 5b7a8241b1
commit dc28f8f895
17 changed files with 1406 additions and 92 deletions

View File

@ -199,6 +199,22 @@
<artifactId>httpmime</artifactId>
<version>4.5.6</version>
</dependency>
<dependency>
<groupId>com.bonus</groupId>
<artifactId>bonus-api-system</artifactId>
</dependency>
<dependency>
<groupId>com.bonus</groupId>
<artifactId>bonus-common-redis</artifactId>
</dependency>
<dependency>
<groupId>com.bonus</groupId>
<artifactId>bonus-common-config</artifactId>
</dependency>
<dependency>
<groupId>com.bonus</groupId>
<artifactId>bonus-common-security</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,54 @@
package net.xnzn.service;
import com.bonus.common.core.constant.CacheConstants;
import com.bonus.common.core.utils.StringUtils;
import com.bonus.common.core.utils.VerificationCodeUtils;
import com.bonus.common.redis.service.RedisService;
import com.bonus.common.security.config.VerificationCodeConfig;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.concurrent.TimeUnit;
import static com.bonus.common.core.utils.VerificationCodeUtils.CodeType.NUMERIC;
/**
* @author bonus
*/
@Service
public class EmailService {
@Resource
private VerificationCodeConfig verificationCodeConfig;
@Resource
private RedisService redisService;
@Resource
private JavaMailSender mailSender;
/**
* 发送简单邮件
*
* @param to 接收者邮箱地址
*/
public String sendSimpleEmail(String to) {
String code = VerificationCodeUtils.generateVerificationCode(NUMERIC);
String str = verificationCodeConfig.getContent().replace("<code>", code);
str = str.replace("<time>", verificationCodeConfig.getTime().toString());
SimpleMailMessage message = new SimpleMailMessage();
// 发件人邮箱地址
message.setFrom("2642480752@qq.com");
// 收件人邮箱地址
message.setTo(to);
// 邮件主题
message.setSubject(verificationCodeConfig.getTitle());
// 邮件内容
message.setText(str);
// 发送邮件
mailSender.send(message);
String uuid = StringUtils.randomUUID();
String verifyKey = CacheConstants.VERIFICATION_CODE + uuid;
redisService.setCacheObject(verifyKey, code, verificationCodeConfig.getTime(), TimeUnit.MINUTES);
return uuid;
}
}

View File

@ -0,0 +1,52 @@
package net.xnzn.service;
import com.bonus.common.core.constant.CacheConstants;
import com.bonus.common.core.exception.CaptchaException;
import com.bonus.common.core.utils.StringUtils;
import com.bonus.common.core.utils.VerificationCodeUtils;
import com.bonus.common.core.utils.sms.SmsUtils;
import com.bonus.common.redis.service.RedisService;
import com.bonus.common.security.config.VerificationCodeConfig;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.concurrent.TimeUnit;
import static com.bonus.common.core.utils.VerificationCodeUtils.CodeType.NUMERIC;
/**
* @author bonus
*/
@Component
public class SmsService {
@Resource
private VerificationCodeConfig verificationCodeConfig;
@Resource
private RedisService redisService;
/**
* 生成手机验证码
*
* @return AjaxResult
* @throws CaptchaException 自定义captcha 异常
*/
public void sendSimplePhone(String to) {
if (StringUtils.isEmpty(to)) {
throw new CaptchaException("手机号不能为空");
}
String code = VerificationCodeUtils.generateVerificationCode(NUMERIC);
String str = verificationCodeConfig.getContent().replace("<code>", code);
str = str.replace("<time>", verificationCodeConfig.getTime().toString());
String s = SmsUtils.smsToken(to, str, "");
if (StringUtils.isNotEmpty(s)) {
if (s.contains("ok")) {
String verifyKey = CacheConstants.VERIFICATION_CODE + StringUtils.nvl(to, "");
redisService.setCacheObject(verifyKey, code, verificationCodeConfig.getTime(), TimeUnit.MINUTES);
} else {
throw new CaptchaException("获取短信失败");
}
} else {
throw new CaptchaException("获取短信失败");
}
}
}

View File

@ -0,0 +1,220 @@
package net.xnzn.service;
import cn.hutool.core.util.ObjectUtil;
import com.bonus.common.core.constant.SecurityConstants;
import com.bonus.common.core.utils.JwtUtils;
import com.bonus.common.core.utils.ServletUtils;
import com.bonus.common.core.utils.StringUtils;
import com.bonus.common.core.utils.ip.IpUtils;
import com.bonus.common.core.utils.uuid.IdUtils;
import com.bonus.common.core.web.domain.AjaxResult;
import com.bonus.common.redis.service.RedisService;
import com.bonus.common.security.utils.SecurityUtils;
import com.bonus.config.SystemConfig;
import com.bonus.system.api.RemoteUserService;
import com.bonus.system.api.domain.SysUser;
import com.bonus.system.api.model.LoginUser;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
* token验证处理
*
* @author bonus
*/
@Component
public class TokenService {
@Resource
private SystemConfig systemConfig;
private static final Logger log = LoggerFactory.getLogger(TokenService.class);
@Autowired
private RedisService redisService;
@Resource
RemoteUserService remoteUserService;
protected static final long MILLIS_SECOND = 1000;
protected static final long MILLIS_MINUTE = 60 * MILLIS_SECOND;
private final static long EXPIRETIME = 720L;
private final static String CUST_ACCESS_TOKEN = "cust_login_tokens:";
private final static String CUST_LOGIN_USER_KEY = "cust_login_users:";
private final static Long MILLIS_MINUTE_TEN = 120L * MILLIS_MINUTE;
private static final String CUST_DETAILS_USER_ID = "cust_user_id";
private static final String CUST_DETAILS_USERNAME = "cust_username";
private static final String CUST_USER_KEY = "cust_user_key";
private static final String CUST_LOGIN_USER = "cust_login_user";
/**
* 创建令牌
*/
public Map<String, Object> createToken(LoginUser loginUser) {
// 检查并删除已有的token
delExistingToken(loginUser.getSysUser().getUserId());
String token = IdUtils.fastUUID();
Long userId = loginUser.getSysUser().getUserId();
String userName = loginUser.getSysUser().getUserName();
loginUser.setToken(token);
loginUser.setUserid(userId);
loginUser.setUsername(userName);
loginUser.setIpaddr(IpUtils.getIpAddr());
refreshToken(loginUser);
// Jwt存储信息
Map<String, Object> claimsMap = new HashMap<String, Object>(16);
claimsMap.put(CUST_USER_KEY, token);
claimsMap.put(CUST_DETAILS_USER_ID, userId);
claimsMap.put(CUST_DETAILS_USERNAME, userName);
String accessToken = JwtUtils.createToken(claimsMap);
Map<String, Object> rspMap = new HashMap<String, Object>(16);
rspMap.put("cust_access_token", accessToken);
rspMap.put("cust_expires_in", EXPIRETIME);
rspMap.put("cust_isLogin", isLogin(String.valueOf(userId)));
long tokenTime = getTokenTime();
//对token进行存储
redisService.setCacheObject(CUST_LOGIN_USER_KEY + userId, token, tokenTime, TimeUnit.MINUTES);
SysUser sysUser = new SysUser();
sysUser.setUserId(loginUser.getSysUser().getUserId());
sysUser.setLoginDate(new Date());
AjaxResult edit = remoteUserService.systemUpdateUser(sysUser, SecurityConstants.INNER);
return rspMap;
}
public boolean isLogin(String userId) {
String existingTokenKey = redisService.getCacheObject(CUST_LOGIN_USER_KEY + userId);
return existingTokenKey != null;
}
public boolean isKey(String key) {
return redisService.hasKey(getTokenKey(key));
}
/**
* 删除已有的token
*/
public void delExistingToken(Long userId) {
String existingTokenKey = redisService.getCacheObject(CUST_LOGIN_USER_KEY + userId);
if (existingTokenKey != null) {
redisService.deleteObject(getTokenKey(existingTokenKey));
redisService.deleteObject(CUST_LOGIN_USER_KEY + userId);
}
}
/**
* 获取用户身份信息
*
* @return 用户信息
*/
public LoginUser getLoginUser() {
return getLoginUser(ServletUtils.getRequest());
}
/**
* 获取用户身份信息
*
* @return 用户信息
*/
public LoginUser getLoginUser(HttpServletRequest request) {
// 获取请求携带的令牌
String token = SecurityUtils.getToken(request);
return getLoginUser(token);
}
/**
* 获取用户身份信息
*
* @return 用户信息
*/
public LoginUser getLoginUser(String token) {
LoginUser user = null;
try {
if (StringUtils.isNotEmpty(token)) {
String userkey = JwtUtils.getUserKey(token);
user = redisService.getCacheObject(getTokenKey(userkey));
return user;
}
} catch (Exception e) {
log.error("获取用户信息异常'{}'", e.getMessage());
}
return user;
}
/**
* 设置用户身份信息
*/
public void setLoginUser(LoginUser loginUser) {
if (StringUtils.isNotNull(loginUser) && StringUtils.isNotEmpty(loginUser.getToken())) {
refreshToken(loginUser);
}
}
/**
* 删除用户缓存信息
*/
public void delLoginUser(String token) {
if (StringUtils.isNotEmpty(token)) {
String userkey = JwtUtils.getUserKey(token);
redisService.deleteObject(getTokenKey(userkey));
}
}
/**
* 验证令牌有效期相差不足120分钟自动刷新缓存
*
* @param loginUser
*/
public void verifyToken(LoginUser loginUser) {
long expireTime = loginUser.getExpireTime();
long currentTime = System.currentTimeMillis();
if (expireTime - currentTime <= MILLIS_MINUTE_TEN) {
refreshToken(loginUser);
}
}
/**
* 刷新令牌有效期
*
* @param loginUser 登录信息
*/
public void refreshToken(LoginUser loginUser) {
long tokenTime = getTokenTime();
loginUser.setLoginTime(System.currentTimeMillis());
loginUser.setExpireTime(loginUser.getLoginTime() + tokenTime * MILLIS_MINUTE);
// 根据uuid将loginUser缓存
String userKey = getTokenKey(loginUser.getToken());
redisService.setCacheObject(userKey, loginUser, tokenTime, TimeUnit.MINUTES);
}
private String getTokenKey(String token) {
return CUST_ACCESS_TOKEN + token;
}
private Long getTokenTime(){
long tokenTime = 20L;
String redisResult = redisService.getCacheObject("sys_config:"+ "sys.visit.tokentime");
if(!redisResult.isEmpty()) {
tokenTime = Long.parseLong(redisResult);
}else {
Long result = systemConfig.getTokenTime();
if (!ObjectUtil.isEmpty(result)){
tokenTime = result;
}
}
return tokenTime;
}
}

View File

@ -102,6 +102,12 @@
<version>1.2.23</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.bonus</groupId>
<artifactId>bonus-common-biz</artifactId>
<version>24.12.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
</dependencies>

View File

@ -0,0 +1,96 @@
package com.bonus.auth.constant;
import java.util.HashMap;
import java.util.Map;
public enum CustLoginTypeEnum {
NAME_PWD(1, "姓名+密码"),
TEL_PWD(2, "手机号+密码"),
TEL_CODE(3, "手机号+验证码"),
NAME_CUST_NUM_PWD(4, "姓名+工号+密码"),
ID_CARD_PWD(5, "身份证号+密码");
private final Integer key;
private final String value;
private CustLoginTypeEnum(Integer key, String value) {
this.key = key;
this.value = value;
}
public static Integer getKey(String value) {
CustLoginTypeEnum[] enums = values();
CustLoginTypeEnum[] var2 = enums;
int var3 = enums.length;
for(int var4 = 0; var4 < var3; ++var4) {
CustLoginTypeEnum temp = var2[var4];
if (temp.value().equals(value)) {
return temp.key();
}
}
return null;
}
public static String getValue(Integer key) {
CustLoginTypeEnum[] enums = values();
CustLoginTypeEnum[] var2 = enums;
int var3 = enums.length;
for(int var4 = 0; var4 < var3; ++var4) {
CustLoginTypeEnum temp = var2[var4];
if (temp.key().equals(key)) {
return temp.value();
}
}
return null;
}
public static Map<Integer, String> getLoginTypeToMap() {
Map<Integer, String> map = new HashMap();
CustLoginTypeEnum[] enums = values();
CustLoginTypeEnum[] var2 = enums;
int var3 = enums.length;
for(int var4 = 0; var4 < var3; ++var4) {
CustLoginTypeEnum temp = var2[var4];
map.put(temp.key, temp.value);
}
return map;
}
public static Map<Integer, String> getNeedPasswordLoginTypeToMap() {
HashMap<Integer, String> map = new HashMap();
map.put(TEL_PWD.key, TEL_PWD.value);
map.put(NAME_PWD.key, NAME_PWD.value);
map.put(NAME_CUST_NUM_PWD.key, NAME_CUST_NUM_PWD.value);
map.put(ID_CARD_PWD.key, ID_CARD_PWD.value);
return map;
}
public static boolean contains(Integer loginType) {
CustLoginTypeEnum[] enums = values();
CustLoginTypeEnum[] var2 = enums;
int var3 = enums.length;
for(int var4 = 0; var4 < var3; ++var4) {
CustLoginTypeEnum temp = var2[var4];
if (temp.key().equals(loginType)) {
return true;
}
}
return false;
}
public Integer key() {
return this.key;
}
public String value() {
return this.value;
}
}

View File

@ -1,12 +1,19 @@
package com.bonus.auth.controller;
import com.alibaba.fastjson.JSONObject;
import cn.hutool.core.text.CharSequenceUtil;
import com.bonus.auth.config.LoginType;
import com.bonus.auth.constant.CustLoginTypeEnum;
import com.bonus.auth.domain.CustInfo;
import com.bonus.auth.domain.CustInfoAppIdLoginDTO;
import com.bonus.auth.domain.CustInfoAppIdLoginVO;
import com.bonus.auth.factory.LoginStrategyFactory;
import com.bonus.auth.form.LoginBody;
import com.bonus.auth.form.RegisterBody;
import com.bonus.auth.mapper.CustCasualMapper;
import com.bonus.auth.mapper.CustInfoMapper;
import com.bonus.auth.service.*;
import com.bonus.common.core.constant.CacheConstants;
import com.bonus.auth.utils.AesEncryptUtil;
import com.bonus.auth.utils.SM4EncryptUtils;
import com.bonus.common.core.constant.SecurityConstants;
import com.bonus.common.core.domain.R;
import com.bonus.common.core.exception.ServiceException;
@ -15,15 +22,14 @@ import com.bonus.common.core.utils.StringUtils;
import com.bonus.common.core.web.domain.AjaxResult;
import com.bonus.common.redis.service.RedisService;
import com.bonus.common.security.auth.AuthUtil;
import com.bonus.common.security.service.TokenService;
import com.bonus.common.security.utils.SecurityUtils;
import com.bonus.config.SystemConfig;
import com.bonus.system.api.RemoteConfigService;
import com.bonus.system.api.RemoteLogService;
import com.bonus.system.api.RemoteUserService;
import com.bonus.system.api.domain.SysUser;
import com.bonus.system.api.model.LoginUser;
import lombok.extern.slf4j.Slf4j;
import net.xnzn.service.TokenService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.ResponseEntity;
@ -32,13 +38,9 @@ import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.*;
/**
* Token 控制器
@ -78,57 +80,63 @@ public class TokenController {
@Resource
private RemoteConfigService configService;
@Resource
private CustInfoMapper custInfoMapper;
@Resource
private CustCasualMapper custCasualMapper;
private static final String CUST_LOGIN_TOKEN_KEY = "cust_login_tokens:";
@PostMapping("isAdmin")
public R<?> isAdmin(@RequestBody LoginBody form) {
if (!config.isAdmin()) {
return R.ok(false);
}
passwordValidatorService.validateLoginParameters(form.getUsername(), form.getPassword());
//通过用户名获取人员信息
R<LoginUser> userResult = remoteUserService.getUserInfo(form.getUsername(), SecurityConstants.INNER);
// 验证用户查询结果
passwordValidatorService.validateUserResult(form.getUsername(), userResult);
LoginUser userInfo = userResult.getData();
SysUser user = userInfo.getSysUser();
passwordValidatorService.validateApprovalStatus(form.getUsername(), user);
// 验证用户状态
passwordValidatorService.validateUserStatus(form.getUsername(), user);
// 验证密码
passwordService.validate(user, form.getPassword(), System.currentTimeMillis());
// 处理IP校验
passwordValidatorService.handleIpValidation(form.getUsername(), user);
if (userResult.getData() == null || R.FAIL == userResult.getCode()) {
return R.fail("登录用户不存在");
}
Set<String> roles = userResult.getData().getRoles();
return R.ok(roles.contains("admin"));
}
// @PostMapping("isAdmin")
// public R<?> isAdmin(@RequestBody LoginBody form) {
// if (!config.isAdmin()) {
// return R.ok(false);
// }
// passwordValidatorService.validateLoginParameters(form.getUsername(), form.getPassword());
// //通过用户名获取人员信息
// R<LoginUser> userResult = remoteUserService.getUserInfo(form.getUsername(), SecurityConstants.INNER);
// // 验证用户查询结果
// passwordValidatorService.validateUserResult(form.getUsername(), userResult);
// LoginUser userInfo = userResult.getData();
// SysUser user = userInfo.getSysUser();
// passwordValidatorService.validateApprovalStatus(form.getUsername(), user);
// // 验证用户状态
// passwordValidatorService.validateUserStatus(form.getUsername(), user);
// // 验证密码
// passwordService.validate(user, form.getPassword(), System.currentTimeMillis());
// // 处理IP校验
// passwordValidatorService.handleIpValidation(form.getUsername(), user);
// if (userResult.getData() == null || R.FAIL == userResult.getCode()) {
// return R.fail("登录用户不存在");
// }
// Set<String> roles = userResult.getData().getRoles();
// return R.ok(roles.contains("admin"));
// }
@PostMapping("isLogin")
public R<?> isLogin(@RequestBody LoginBody form) {
LoginStrategy strategy = loginStrategyFactory.getStrategy(form.getLoginType());
if (strategy == null) {
return R.fail("不支持的登录方式");
}
if (form.getLoginType()== LoginType.EMAIL_OTP || form.getLoginType()== LoginType.PHONE_OTP ){
form.setPassword(form.getVerificationCode());
}
LoginUser login = strategy.login(form.getUsername(), form.getPassword());
return R.ok(tokenService.isLogin(String.valueOf(login.getSysUser().getUserId())));
}
// @PostMapping("isLogin")
// public R<?> isLogin(@RequestBody LoginBody form) {
// LoginStrategy strategy = loginStrategyFactory.getStrategy(form.getLoginType());
// if (strategy == null) {
// return R.fail("不支持的登录方式");
// }
// if (form.getLoginType()== LoginType.EMAIL_OTP || form.getLoginType()== LoginType.PHONE_OTP ){
// form.setPassword(form.getVerificationCode());
// }
// LoginUser login = strategy.login(form.getUsername(), form.getPassword());
// return R.ok(tokenService.isLogin(String.valueOf(login.getSysUser().getUserId())));
// }
@PostMapping("login")
@PostMapping("cust-login")
public R<?> login(@RequestBody LoginBody form) {
// 获取相应的登录策略
LoginStrategy strategy = loginStrategyFactory.getStrategy(form.getLoginType());
if (strategy == null) {
return R.fail("不支持的登录方式");
}
if (form.getLoginType()== LoginType.EMAIL_OTP || form.getLoginType()== LoginType.PHONE_OTP ){
form.setPassword(form.getVerificationCode());
}
// LoginStrategy strategy = loginStrategyFactory.getStrategy(form.getLoginType());
// if (strategy == null) {
// return R.fail("不支持的登录方式");
// }
// if (form.getLoginType()== LoginType.EMAIL_OTP || form.getLoginType()== LoginType.PHONE_OTP ){
// form.setPassword(form.getVerificationCode());
// }
/**对系统并发数进行判断*/
long concurrency = 100;
@ -142,10 +150,57 @@ public class TokenController {
return R.fail("当前系统用户并发数超过系统配置,请稍后再试");
}
LoginUser login = strategy.login(form.getUsername(), form.getPassword());
logService.saveLogin(form.getUsername(), "登录", "登录成功", null, "成功");
return R.ok(tokenService.createToken(login));
CustInfoAppIdLoginVO login = custLogin(form);
//logService.saveLogin(form.getUsername(), "登录", "登录成功", null, "成功");
return R.ok(null); //(tokenService.createToken(login));
}
private CustInfoAppIdLoginVO custLogin(LoginBody content) {
if (CharSequenceUtil.isNotBlank(content.getMobile())) {
content.setMobile(AesEncryptUtil.aesDecode(content.getMobile()));
}
CustInfo custInfo = new CustInfo();
if (CustLoginTypeEnum.NAME_PWD.key().equals(content.getLoginType())) {
custInfo.setCustName(SM4EncryptUtils.sm4Encryptbyconfig(content.getCustName()));
} else if (CustLoginTypeEnum.NAME_CUST_NUM_PWD.key().equals(content.getLoginType())) {
custInfo.setCustName(SM4EncryptUtils.sm4Encryptbyconfig(content.getCustName()));
custInfo.setCustNum(content.getCustNum());
} else if (CustLoginTypeEnum.TEL_PWD.key().equals(content.getLoginType())) {
custInfo.setMobile(SM4EncryptUtils.sm4Encryptbyconfig(content.getMobile()));
} else if (CustLoginTypeEnum.TEL_CODE.key().equals(content.getLoginType())) {
// SmsCodeVerifyDTO smsCodeVerifyDTO = new SmsCodeVerifyDTO();
// smsCodeVerifyDTO.setCode(content.getCode());
// smsCodeVerifyDTO.setTelephoneNumber(content.getMobile());
// boolean flag = this.smsCodeApi.verifySmsCode(smsCodeVerifyDTO);
// if (!flag) {
// throw new ServiceException("验证码错误");
// }
R<?> result = sysLoginService.getPhoneCode(content.getMobile(), content.getVerificationCodeType());
if (result.getCode() != 200) {
throw new ServiceException("验证码错误");
}
custInfo.setMobile(SM4EncryptUtils.sm4Encryptbyconfig(content.getMobile()));
} else {
if (!CustLoginTypeEnum.ID_CARD_PWD.key().equals(content.getLoginType())) {
throw new ServiceException("参数错误");
}
custInfo.setIdCard(SM4EncryptUtils.sm4Encryptbyconfig(content.getIdCard()));
}
CustInfoAppIdLoginVO result = this.custInfoMapper.selectLoginInfo(custInfo);
if (Objects.isNull(result)) {
throw new ServiceException("未找到用户");
} else {
if (CustLoginTypeEnum.getNeedPasswordLoginTypeToMap().containsKey(content.getLoginType())) {
content.setPassword(AesEncryptUtil.aesDecode(content.getPassword()));
log.info("输入密码:{}", content.getPassword());
if (!encoder.matches(content.getPassword(), result.getPwd())) {
throw new ServiceException("密码错误");
}
}
return null; //this.addOrUpdateCustCasual(sourceType, result);
}
}
/**
@ -156,7 +211,7 @@ public class TokenController {
*/
@PostMapping("getPhoneCode")
public R<?> getPhoneCode(@RequestBody LoginBody form) {
return sysLoginService.getPhoneCode(form.getUsername(), form.getVerificationCodeType());
return sysLoginService.getPhoneCode(form.getMobile(), form.getVerificationCodeType());
}
/**
@ -218,7 +273,7 @@ public class TokenController {
@PostMapping("register")
public R<?> register(@RequestBody RegisterBody registerBody) {
sysLoginService.register(registerBody);
logService.saveRegister(registerBody.getUsername(), "注册", "注册成功", null, "成功");
logService.saveRegister(registerBody.getMobile(), "注册", "注册成功", null, "成功");
return R.ok();
}
}

View File

@ -0,0 +1,352 @@
package com.bonus.auth.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.time.LocalDateTime;
@TableName("cust_casual")
@ApiModel("临时人员表")
public class CustCasual extends Model<CustCasual> {
private static final long serialVersionUID = 1L;
@TableId
@ApiModelProperty("主键自增")
private Long id;
@ApiModelProperty("临时人员id")
private Long casualId;
@ApiModelProperty("临时人员名称")
private String casualName;
@ApiModelProperty("人员id")
private Long custId;
@ApiModelProperty("手机号")
private String mobile;
@ApiModelProperty("邮箱")
private String email;
@ApiModelProperty("地址")
private String address;
@ApiModelProperty("openid")
private String openid;
@ApiModelProperty("来源类型 1-钉钉 2-微信 3-小程序")
private Integer sourceType;
@ApiModelProperty("是否删除")
private Integer ifDel;
@ApiModelProperty("乐观锁")
private Integer revision;
@ApiModelProperty("创建人")
private String crby;
@ApiModelProperty("创建时间")
private LocalDateTime crtime;
@ApiModelProperty("更新人")
private String upby;
@ApiModelProperty("更新时间")
private LocalDateTime uptime;
@ApiModelProperty("支付宝签约号")
private String alipayContractNum;
@ApiModelProperty("支付宝-企业码-员工id")
private String entCodeEmpId;
@ApiModelProperty("IOT开通刷脸支持唯一操作流水号")
private String uniqueId;
public static CustCasualBuilder builder() {
return new CustCasualBuilder();
}
public Long getId() {
return this.id;
}
public Long getCasualId() {
return this.casualId;
}
public String getCasualName() {
return this.casualName;
}
public Long getCustId() {
return this.custId;
}
public String getMobile() {
return this.mobile;
}
public String getEmail() {
return this.email;
}
public String getAddress() {
return this.address;
}
public String getOpenid() {
return this.openid;
}
public Integer getSourceType() {
return this.sourceType;
}
public Integer getIfDel() {
return this.ifDel;
}
public Integer getRevision() {
return this.revision;
}
public String getCrby() {
return this.crby;
}
public LocalDateTime getCrtime() {
return this.crtime;
}
public String getUpby() {
return this.upby;
}
public LocalDateTime getUptime() {
return this.uptime;
}
public String getAlipayContractNum() {
return this.alipayContractNum;
}
public String getEntCodeEmpId() {
return this.entCodeEmpId;
}
public String getUniqueId() {
return this.uniqueId;
}
public void setId(final Long id) {
this.id = id;
}
public void setCasualId(final Long casualId) {
this.casualId = casualId;
}
public void setCasualName(final String casualName) {
this.casualName = casualName;
}
public void setCustId(final Long custId) {
this.custId = custId;
}
public void setMobile(final String mobile) {
this.mobile = mobile;
}
public void setEmail(final String email) {
this.email = email;
}
public void setAddress(final String address) {
this.address = address;
}
public void setOpenid(final String openid) {
this.openid = openid;
}
public void setSourceType(final Integer sourceType) {
this.sourceType = sourceType;
}
public void setIfDel(final Integer ifDel) {
this.ifDel = ifDel;
}
public void setRevision(final Integer revision) {
this.revision = revision;
}
public void setCrby(final String crby) {
this.crby = crby;
}
public void setCrtime(final LocalDateTime crtime) {
this.crtime = crtime;
}
public void setUpby(final String upby) {
this.upby = upby;
}
public void setUptime(final LocalDateTime uptime) {
this.uptime = uptime;
}
public void setAlipayContractNum(final String alipayContractNum) {
this.alipayContractNum = alipayContractNum;
}
public void setEntCodeEmpId(final String entCodeEmpId) {
this.entCodeEmpId = entCodeEmpId;
}
public void setUniqueId(final String uniqueId) {
this.uniqueId = uniqueId;
}
public String toString() {
Long var10000 = this.getId();
return "CustCasual(id=" + var10000 + ", casualId=" + this.getCasualId() + ", casualName=" + this.getCasualName() + ", custId=" + this.getCustId() + ", mobile=" + this.getMobile() + ", email=" + this.getEmail() + ", address=" + this.getAddress() + ", openid=" + this.getOpenid() + ", sourceType=" + this.getSourceType() + ", ifDel=" + this.getIfDel() + ", revision=" + this.getRevision() + ", crby=" + this.getCrby() + ", crtime=" + String.valueOf(this.getCrtime()) + ", upby=" + this.getUpby() + ", uptime=" + String.valueOf(this.getUptime()) + ", alipayContractNum=" + this.getAlipayContractNum() + ", entCodeEmpId=" + this.getEntCodeEmpId() + ", uniqueId=" + this.getUniqueId() + ")";
}
public CustCasual(final Long id, final Long casualId, final String casualName, final Long custId, final String mobile, final String email, final String address, final String openid, final Integer sourceType, final Integer ifDel, final Integer revision, final String crby, final LocalDateTime crtime, final String upby, final LocalDateTime uptime, final String alipayContractNum, final String entCodeEmpId, final String uniqueId) {
this.id = id;
this.casualId = casualId;
this.casualName = casualName;
this.custId = custId;
this.mobile = mobile;
this.email = email;
this.address = address;
this.openid = openid;
this.sourceType = sourceType;
this.ifDel = ifDel;
this.revision = revision;
this.crby = crby;
this.crtime = crtime;
this.upby = upby;
this.uptime = uptime;
this.alipayContractNum = alipayContractNum;
this.entCodeEmpId = entCodeEmpId;
this.uniqueId = uniqueId;
}
public CustCasual() {
}
public static class CustCasualBuilder {
private Long id;
private Long casualId;
private String casualName;
private Long custId;
private String mobile;
private String email;
private String address;
private String openid;
private Integer sourceType;
private Integer ifDel;
private Integer revision;
private String crby;
private LocalDateTime crtime;
private String upby;
private LocalDateTime uptime;
private String alipayContractNum;
private String entCodeEmpId;
private String uniqueId;
CustCasualBuilder() {
}
public CustCasualBuilder id(final Long id) {
this.id = id;
return this;
}
public CustCasualBuilder casualId(final Long casualId) {
this.casualId = casualId;
return this;
}
public CustCasualBuilder casualName(final String casualName) {
this.casualName = casualName;
return this;
}
public CustCasualBuilder custId(final Long custId) {
this.custId = custId;
return this;
}
public CustCasualBuilder mobile(final String mobile) {
this.mobile = mobile;
return this;
}
public CustCasualBuilder email(final String email) {
this.email = email;
return this;
}
public CustCasualBuilder address(final String address) {
this.address = address;
return this;
}
public CustCasualBuilder openid(final String openid) {
this.openid = openid;
return this;
}
public CustCasualBuilder sourceType(final Integer sourceType) {
this.sourceType = sourceType;
return this;
}
public CustCasualBuilder ifDel(final Integer ifDel) {
this.ifDel = ifDel;
return this;
}
public CustCasualBuilder revision(final Integer revision) {
this.revision = revision;
return this;
}
public CustCasualBuilder crby(final String crby) {
this.crby = crby;
return this;
}
public CustCasualBuilder crtime(final LocalDateTime crtime) {
this.crtime = crtime;
return this;
}
public CustCasualBuilder upby(final String upby) {
this.upby = upby;
return this;
}
public CustCasualBuilder uptime(final LocalDateTime uptime) {
this.uptime = uptime;
return this;
}
public CustCasualBuilder alipayContractNum(final String alipayContractNum) {
this.alipayContractNum = alipayContractNum;
return this;
}
public CustCasualBuilder entCodeEmpId(final String entCodeEmpId) {
this.entCodeEmpId = entCodeEmpId;
return this;
}
public CustCasualBuilder uniqueId(final String uniqueId) {
this.uniqueId = uniqueId;
return this;
}
public CustCasual build() {
return new CustCasual(this.id, this.casualId, this.casualName, this.custId, this.mobile, this.email, this.address, this.openid, this.sourceType, this.ifDel, this.revision, this.crby, this.crtime, this.upby, this.uptime, this.alipayContractNum, this.entCodeEmpId, this.uniqueId);
}
public String toString() {
Long var10000 = this.id;
return "CustCasual.CustCasualBuilder(id=" + var10000 + ", casualId=" + this.casualId + ", casualName=" + this.casualName + ", custId=" + this.custId + ", mobile=" + this.mobile + ", email=" + this.email + ", address=" + this.address + ", openid=" + this.openid + ", sourceType=" + this.sourceType + ", ifDel=" + this.ifDel + ", revision=" + this.revision + ", crby=" + this.crby + ", crtime=" + String.valueOf(this.crtime) + ", upby=" + this.upby + ", uptime=" + String.valueOf(this.uptime) + ", alipayContractNum=" + this.alipayContractNum + ", entCodeEmpId=" + this.entCodeEmpId + ", uniqueId=" + this.uniqueId + ")";
}
}
}

View File

@ -0,0 +1,212 @@
package com.bonus.auth.domain;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import net.xnzn.core.common.encrypt.SM4EncDecHandler;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.time.LocalDate;
import java.time.LocalDateTime;
@TableName(
value = "cust_info",
autoResultMap = true
)
@ApiModel("人员资料表")
@Data
public class CustInfo {
private static final long serialVersionUID = 1L;
@TableId
@ApiModelProperty("主键自增")
private Long id;
@ApiModelProperty("人员id")
private @NotNull() Long custId;
@ApiModelProperty("人员编号")
private @NotBlank() String custNum;
@ApiModelProperty("人员姓名")
@TableField(
value = "cust_name",
typeHandler = SM4EncDecHandler.class
)
private @NotBlank() String custName;
@ApiModelProperty("人员姓名")
@TableField(
value = "cust_name_like"
)
private String custNameLike;
@ApiModelProperty("人员限制id")
private Integer custLimitId;
@ApiModelProperty("第三方人员id")
private String custThirdId;
@ApiModelProperty("推送到设备上生成的用户id")
private String custDeviceId;
@ApiModelProperty("手机号")
@TableField(
value = "mobile",
typeHandler = SM4EncDecHandler.class
)
private String mobile;
@ApiModelProperty("手机号")
@TableField(
value = "mobile_suffix",
typeHandler = SM4EncDecHandler.class
)
private String mobileSuffix;
@ApiModelProperty("登录密码")
private String pwd;
@ApiModelProperty("身份证号")
@TableField(
value = "id_card",
typeHandler = SM4EncDecHandler.class
)
private String idCard;
@ApiModelProperty("邮箱")
private String email;
@ApiModelProperty("性别 1-男 2-女")
private Integer sex;
@ApiModelProperty("年龄")
private Integer age;
@ApiModelProperty("生日")
@TableField(
updateStrategy = FieldStrategy.IGNORED
)
private LocalDate birthday;
@ApiModelProperty("民族编码")
@TableField(
updateStrategy = FieldStrategy.IGNORED
)
private Integer ethnicityCode;
@ApiModelProperty("籍贯")
private String nativePlace;
@ApiModelProperty("人脸照片地址")
private String custPhotoUrl;
@ApiModelProperty("头像地址")
private String headPortraitUrl;
@ApiModelProperty("所属组织id")
private @NotNull() Long orgId;
@ApiModelProperty("机构编号")
private String orgNum;
@ApiModelProperty("机构全称")
private String orgFullName;
@ApiModelProperty("成本中心id")
@TableField(
updateStrategy = FieldStrategy.IGNORED
)
private Long costCenterId;
@ApiModelProperty("所属位置")
@TableField(
updateStrategy = FieldStrategy.IGNORED
)
private Long placeId;
@ApiModelProperty("所属位置名称")
private String placeFullName;
@ApiModelProperty("人员类别")
@TableField(
updateStrategy = FieldStrategy.IGNORED
)
private Integer psnType;
@ApiModelProperty("人员类别名称")
private String psnTypeName;
@ApiModelProperty("家庭地址")
private String homeAddr;
@ApiModelProperty("QQ")
private String qq;
@ApiModelProperty("微信")
private String wechat;
@ApiModelProperty("企业微信")
private String companyWechat;
@ApiModelProperty("钉钉")
private String dingtalk;
@ApiModelProperty("支付宝openid")
private String alipayOpenid;
@ApiModelProperty("紧急联系人")
private String emerContactPerson;
@ApiModelProperty("紧急联系电话")
private String emerContactNum;
@ApiModelProperty("紧急联系人身份证号")
private String emerContactCard;
@ApiModelProperty("职位")
private String job;
@ApiModelProperty("职位等级")
private String jobRank;
@ApiModelProperty("职位级别")
private String jobLevel;
@ApiModelProperty("职称")
private String jobTitle;
@ApiModelProperty("职称等级")
private String jobTitleRank;
@ApiModelProperty("编制")
private String authStrength;
@ApiModelProperty("职务")
private String position;
@ApiModelProperty("入职日期")
@TableField(
updateStrategy = FieldStrategy.IGNORED
)
private LocalDate entryDate;
@ApiModelProperty("合同签订日期")
@TableField(
updateStrategy = FieldStrategy.IGNORED
)
private LocalDate signingDate;
@ApiModelProperty("合同到期日期")
@TableField(
updateStrategy = FieldStrategy.IGNORED
)
private LocalDate expiryDate;
@ApiModelProperty("人员状态 1-正常 2-注销")
private Integer custState;
@ApiModelProperty("点赞调查批次号")
private Long likeBatch;
@ApiModelProperty("乐观锁")
private Integer revision;
@TableField(
value = "crby",
fill = FieldFill.INSERT
)
@ApiModelProperty("创建人")
private String crby;
@TableField(
value = "crtime",
fill = FieldFill.INSERT
)
@ApiModelProperty("创建时间")
private LocalDateTime crtime;
@TableField(
value = "upby",
fill = FieldFill.UPDATE
)
@ApiModelProperty("更新人")
private String upby;
@TableField(
value = "uptime",
fill = FieldFill.UPDATE
)
@ApiModelProperty("更新时间")
private LocalDateTime uptime;
@ApiModelProperty("就诊号")
private String doctorNum;
@ApiModelProperty("住院号")
private String hospitalNum;
@ApiModelProperty("医嘱")
private String doctorInstruct;
@ApiModelProperty("住院日期")
private LocalDateTime hospitalDate;
@ApiModelProperty("最近下单时间")
private LocalDateTime orderTime;
@ApiModelProperty("银行卡号")
private String bankCardNum;
@ApiModelProperty("扩展字段1(日期 yyyy-MM-dd)")
private LocalDate extendDate;
@ApiModelProperty("扩展字段2(日期 yyyy-MM-dd HH:mm:ss)")
private LocalDateTime extendDateTime;
@ApiModelProperty("扩展字段3(字符串)")
private String extendStr1;
@ApiModelProperty("扩展字段4(字符串)")
private String extendStr2;
@ApiModelProperty("婚姻状态 0-保密 1-未婚 2-已婚")
private Integer maritalStatus;
}

View File

@ -0,0 +1,25 @@
package com.bonus.auth.domain;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
public class CustInfoAppIdLoginDTO {
@ApiModelProperty("人员编号")
private String custNum;
@ApiModelProperty("人员姓名")
private String custName;
@ApiModelProperty("手机号")
private String mobile;
@ApiModelProperty("appId")
private String appId;
@ApiModelProperty("登录类型")
private Integer loginType;
@ApiModelProperty("登录密码")
private String password;
@ApiModelProperty("身份证号")
private String idCard;
@ApiModelProperty("验证码")
private String code;
}

View File

@ -0,0 +1,26 @@
package com.bonus.auth.domain;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@ApiModel("人员资料表")
@Data
public class CustInfoAppIdLoginVO implements Serializable {
@ApiModelProperty("人员id")
private Long custId;
@ApiModelProperty("人员姓名")
private String custName;
@ApiModelProperty("人员编号")
private String custNum;
@ApiModelProperty("人脸照片地址")
private String custPhotoUrl;
@ApiModelProperty("电话号码")
private String mobile;
@ApiModelProperty("openid")
private String openid;
@ApiModelProperty("登录密码")
private String pwd;
}

View File

@ -2,6 +2,7 @@ package com.bonus.auth.form;
import com.bonus.auth.config.LoginType;
import com.bonus.auth.config.VerificationCodeType;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
@ -11,40 +12,21 @@ import lombok.Data;
*/
@Data
public class LoginBody {
/**
* 用户名
*/
private String username;
/**
* 用户密码
*/
private String password;
private String nickName;
private String email;
private String phone;
@ApiModelProperty("人员编号")
private String custNum;
@ApiModelProperty("人员姓名")
private String custName;
@ApiModelProperty("手机号")
private String mobile;
private String verificationCode;
@ApiModelProperty("appId")
private String appId;
@ApiModelProperty("登录类型")
private Integer loginType;
@ApiModelProperty("登录密码")
private String password;
@ApiModelProperty("身份证号")
private String idCard;
@ApiModelProperty("验证码")
private String code;
private LoginType loginType;
private VerificationCodeType verificationCodeType;
private String mobileCodeType;
/**
* i皖送使用的ticket
*/
private String ticket;
/**
* i皖送登录方式 0web端登录 1H5登录
*/
private String sysType;
}

View File

@ -0,0 +1,26 @@
package com.bonus.auth.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import net.xnzn.core.customer.dto.CustCasualModel;
import net.xnzn.core.customer.model.CustCasual;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface CustCasualMapper extends BaseMapper<CustCasual> {
List<CustCasualModel> queryPageCustCasual(Page<CustCasualModel> page, @Param("custCasual") CustCasual custCasual);
@Select({"select openid from cust_casual where cust_id = #{custId} and source_type = #{sourceType} and if_del = #{ifDel}"})
String selectOpenidByCustId(@Param("custId") Long custId, @Param("sourceType") Integer sourceType, @Param("ifDel") Integer ifDel);
@Select({"select casual_id, openid from cust_casual where cust_id = #{custId} and source_type = #{sourceType} and if_del = #{ifDel}"})
CustCasual selectCustCasualByCustId(@Param("custId") Long custId, @Param("sourceType") Integer sourceType, @Param("ifDel") Integer ifDel);
int updateCustCasual(CustCasual custCasual);
}

View File

@ -0,0 +1,19 @@
package com.bonus.auth.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import net.xnzn.core.customer.model.CustInfo;
import net.xnzn.core.customer.vo.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
@Mapper
public interface CustInfoMapper { //extends BaseMapper<CustInfo> {
// @Select({"select cust_id, cust_name, cust_num, cust_photo_url, mobile ,pwd from cust_info ${ew.customSqlSegment}"})
// CustInfoAppIdLoginVO selectLoginInfo(@Param("ew") Wrapper<CustInfo> wrapper);
CustInfoAppIdLoginVO selectLoginInfo(CustInfo custInfo);
}

View File

@ -0,0 +1,64 @@
package com.bonus.auth.utils;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.Mode;
import cn.hutool.crypto.Padding;
import cn.hutool.crypto.symmetric.AES;
//import net.xnzn.core.common.config.sys.EncryptProperties;
//import net.xnzn.core.common.encrypt.SpringContextHolder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;
@Component
public class AesEncryptUtil {
private static final Logger log = LoggerFactory.getLogger(AesEncryptUtil.class);
private static final String KEY_ALGORITHM = "AES";
private static final String AES_ENCRYPT_KEY = "pigxpigxpigxpigx";
// @Resource
// private EncryptProperties encryptProperties;
//
// public static AesEncryptUtil getInstance() {
// return (AesEncryptUtil) SpringContextHolder.getBean(AesEncryptUtil.class);
// }
public static String aesEncrypt(String encryptStr) {
if (StrUtil.isBlank(encryptStr)) {
return encryptStr;
} else {
AES aes = new AES(Mode.CBC, Padding.ZeroPadding, new SecretKeySpec(AES_ENCRYPT_KEY.getBytes(), "AES"), new IvParameterSpec(AES_ENCRYPT_KEY.getBytes()));
return aes.encryptBase64(encryptStr);
}
}
public static String aesDecode(String decodeStr) {
if (StrUtil.isBlank(decodeStr)) {
return decodeStr;
} else {
AES aes = new AES(Mode.CBC, Padding.ZeroPadding, new SecretKeySpec(AES_ENCRYPT_KEY.getBytes(), "AES"), new IvParameterSpec(AES_ENCRYPT_KEY.getBytes()));
byte[] resultByte;
try {
resultByte = aes.decrypt(Base64.decode(decodeStr.getBytes(StandardCharsets.UTF_8)));
} catch (Exception var5) {
log.info("字段解密异常:" + var5.getMessage());
return decodeStr;
}
return (new String(resultByte, StandardCharsets.UTF_8)).trim();
}
}
public static void main(String[] args) {
System.out.println(aesEncrypt("123"));
System.out.println(aesDecode("Ko0muw9mxpn4mKcd40W0gw=="));
//System.out.println(aesDecode("$2a$10$WoMFC/Qwh/fgVeJoywyqZ.ua6OFU8wxdzaZj4SM14PYa6GimETwMe"));
}
}

View File

@ -0,0 +1,39 @@
package com.bonus.auth.utils;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(
prefix = "data-config"
)
public class DataEncDecProperties {
public static final String PREFIX = "data-config";
private String sm4Key;
private boolean encrypted;
private boolean desensitization;
public String getSm4Key() {
return this.sm4Key;
}
public boolean isEncrypted() {
return this.encrypted;
}
public boolean isDesensitization() {
return this.desensitization;
}
public void setSm4Key(final String sm4Key) {
this.sm4Key = sm4Key;
}
public void setEncrypted(final boolean encrypted) {
this.encrypted = encrypted;
}
public void setDesensitization(final boolean desensitization) {
this.desensitization = desensitization;
}
}

View File

@ -0,0 +1,70 @@
package com.bonus.auth.utils;
import cn.hutool.core.util.DesensitizedUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.SmUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class SM4EncryptUtils {
private static final Logger log = LoggerFactory.getLogger(SM4EncryptUtils.class);
private static final DataEncDecProperties properties = getProperties();
public static final String SUFFIX = "##encrypted";
public static DataEncDecProperties getProperties() {
DataEncDecProperties dataEncDecProperties = new DataEncDecProperties();
dataEncDecProperties.setSm4Key("jY7bZz6Pjml+H/WZYfNSNA==");
dataEncDecProperties.setEncrypted(true);
dataEncDecProperties.setDesensitization(true);
return dataEncDecProperties; //(DataEncDecProperties)SpringContextHolder.getBean(DataEncDecProperties.class);
}
public static String sm4Encrypt(String data) {
try {
return SmUtil.sm4(SecureUtil.decode(properties.getSm4Key())).encryptBase64(data) + "##encrypted";
} catch (Exception var2) {
log.debug("SM4加密异常:{}", var2.getMessage());
return data;
}
}
public static String sm4Encryptbyconfig(String data) {
try {
return properties.isEncrypted() ? SmUtil.sm4(SecureUtil.decode(properties.getSm4Key())).encryptBase64(data) + "##encrypted" : data;
} catch (Exception var2) {
log.debug("SM4加密异常:{}", var2.getMessage());
return data;
}
}
public static String desensitizedByConfig(String data, DesensitizedUtil.DesensitizedType desensitizedType) {
try {
if (properties.isDesensitization()) {
return data.endsWith("##encrypted") ? DesensitizedUtil.desensitized(sm4Decrypt(data), desensitizedType) : DesensitizedUtil.desensitized(data, desensitizedType);
} else {
return data;
}
} catch (Exception var3) {
log.debug("脱敏异常:{}", var3.getMessage());
return data;
}
}
public static String sm4Decrypt(String data) {
try {
if (data.endsWith("##encrypted")) {
data = data.substring(0, data.length() - "##encrypted".length());
return SmUtil.sm4(SecureUtil.decode(properties.getSm4Key())).decryptStr(data);
} else {
return data;
}
} catch (Exception var2) {
log.debug("SM4解密异常:{}", var2.getMessage());
return data;
}
}
public static void main(String[] args) {
System.out.println(sm4Decrypt("H6INNw7emp3/5pYtE6O7kg==##encrypted"));
}
}