123 lines
3.0 KiB
Java
123 lines
3.0 KiB
Java
|
package com.changhu.common.utils;
|
||
|
|
||
|
import cn.dev33.satoken.stp.SaTokenInfo;
|
||
|
import cn.dev33.satoken.stp.StpUtil;
|
||
|
import cn.hutool.core.util.IdUtil;
|
||
|
import cn.hutool.core.util.StrUtil;
|
||
|
import cn.hutool.crypto.SecureUtil;
|
||
|
import com.changhu.common.enums.ResultCode;
|
||
|
import com.changhu.common.exception.MessageException;
|
||
|
import lombok.extern.slf4j.Slf4j;
|
||
|
|
||
|
import java.util.Optional;
|
||
|
|
||
|
/**
|
||
|
* author: luozhun
|
||
|
* desc: some...
|
||
|
* createTime: 2023/12/15 11:30
|
||
|
*/
|
||
|
@Slf4j
|
||
|
public class UserUtil {
|
||
|
|
||
|
public static final String DEFAULT_PASSWORD = "123456";
|
||
|
|
||
|
public static final Long ERROR_USER_ID = -1L;
|
||
|
|
||
|
/**
|
||
|
* 用户登录 保存信息
|
||
|
*
|
||
|
* @param userId 用户id
|
||
|
*/
|
||
|
public static void login(Long userId) {
|
||
|
StpUtil.login(userId);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 登录并且返回SaTokenInfo
|
||
|
*
|
||
|
* @param userId 用户id
|
||
|
* @return SaTokenInfo
|
||
|
*/
|
||
|
public static SaTokenInfo loginAndTokenInfo(Long userId) {
|
||
|
login(userId);
|
||
|
return getTokenInfo();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 用户登出
|
||
|
*/
|
||
|
public static void logout() {
|
||
|
StpUtil.logout();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 获取用户id
|
||
|
*/
|
||
|
public static Long getUserId() {
|
||
|
return StpUtil.getLoginIdAsLong();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 获取当前用户token
|
||
|
*
|
||
|
* @return token
|
||
|
*/
|
||
|
public static String getToken() {
|
||
|
return StpUtil.getTokenValue();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 根据token获取id
|
||
|
*
|
||
|
* @param token token
|
||
|
* @return id
|
||
|
*/
|
||
|
public static Long getUserIdByToken(String token) {
|
||
|
return Long.parseLong(Optional.ofNullable(StpUtil.getLoginIdByToken(token))
|
||
|
.map(Object::toString)
|
||
|
.orElseThrow(() -> new MessageException(ResultCode.NOT_TOKEN)));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 获取token信息
|
||
|
*
|
||
|
* @return token信息
|
||
|
*/
|
||
|
public static SaTokenInfo getTokenInfo() {
|
||
|
return StpUtil.getTokenInfo();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 加密明文密码
|
||
|
*
|
||
|
* @param plainTextPassWord 明文密码
|
||
|
* @return 盐 + 加密后的密码
|
||
|
*/
|
||
|
public static String passWordEncrypt(String plainTextPassWord) {
|
||
|
//随机盐值
|
||
|
String salt = IdUtil.simpleUUID();
|
||
|
//生成密文密码
|
||
|
String ciphertextPassWord = SecureUtil.md5(salt + plainTextPassWord);
|
||
|
return salt + "$$" + ciphertextPassWord;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 解密密码 校验密码是否正确
|
||
|
*
|
||
|
* @param plainTextPassWord 明文密码
|
||
|
* @param salt 盐
|
||
|
* @param ciphertextPassWord 密文密码
|
||
|
* @return 比对结果
|
||
|
*/
|
||
|
public static boolean verifyPassWord(String plainTextPassWord, String salt, String ciphertextPassWord) {
|
||
|
boolean result = false;
|
||
|
if (StrUtil.isAllNotEmpty(plainTextPassWord, salt, ciphertextPassWord)) {
|
||
|
// 使用同样的加密算法和随机盐值生成最终加密的密码
|
||
|
if (StrUtil.equals(SecureUtil.md5(salt + plainTextPassWord), ciphertextPassWord)) {
|
||
|
result = true;
|
||
|
}
|
||
|
}
|
||
|
return result;
|
||
|
}
|
||
|
}
|