build: continew-starter 2.13.2-SNAPSHOT => 2.13.2

1.使用 EncryptHelper 重构用户导入相关加密查询场景
2.BCryptEncryptor 适配最新加密体系
3.使用 Jackson JSONUtils 优化 ServletUtils.writeJSON(Hutool JSONUtil 序列化无法识别 Jackson 注解)
4.DefaultDataPermissionUserDataProvider 包调整、UserData、RoleData 字段类型调整
5.其他隐形升级(租户拦截器优先级、依赖升级等)
This commit is contained in:
2025-07-21 22:12:01 +08:00
parent 84b2c39a30
commit bc44de4bdd
15 changed files with 65 additions and 65 deletions

View File

@@ -17,7 +17,8 @@
package top.continew.admin.common.config.mybatis;
import org.springframework.security.crypto.password.PasswordEncoder;
import top.continew.starter.security.crypto.encryptor.IEncryptor;
import top.continew.starter.security.crypto.encryptor.AbstractEncryptor;
import top.continew.starter.security.crypto.encryptor.CryptoContext;
import top.continew.starter.security.password.constant.PasswordEncoderConstants;
/**
@@ -26,16 +27,17 @@ import top.continew.starter.security.password.constant.PasswordEncoderConstants;
* @author Charles7c
* @since 2024/2/8 22:29
*/
public class BCryptEncryptor implements IEncryptor {
public class BCryptEncryptor extends AbstractEncryptor {
private final PasswordEncoder passwordEncoder;
public BCryptEncryptor(PasswordEncoder passwordEncoder) {
public BCryptEncryptor(CryptoContext context, PasswordEncoder passwordEncoder) {
super(context);
this.passwordEncoder = passwordEncoder;
}
@Override
public String encrypt(String plaintext, String password, String publicKey) {
public String encrypt(String plaintext) {
// 如果已经是 BCrypt 加密格式,直接返回
if (PasswordEncoderConstants.BCRYPT_PATTERN.matcher(plaintext).matches()) {
return plaintext;
@@ -44,7 +46,7 @@ public class BCryptEncryptor implements IEncryptor {
}
@Override
public String decrypt(String ciphertext, String password, String privateKey) {
public String decrypt(String ciphertext) {
return ciphertext;
}
}

View File

@@ -16,14 +16,13 @@
package top.continew.admin.common.config.mybatis;
import cn.hutool.core.convert.Convert;
import top.continew.admin.common.context.UserContext;
import top.continew.admin.common.context.UserContextHolder;
import top.continew.starter.core.util.CollUtils;
import top.continew.starter.extension.datapermission.enums.DataScope;
import top.continew.starter.extension.datapermission.filter.DataPermissionUserDataProvider;
import top.continew.starter.extension.datapermission.model.RoleData;
import top.continew.starter.extension.datapermission.model.UserData;
import top.continew.starter.extension.datapermission.provider.DataPermissionUserDataProvider;
/**
* 数据权限用户数据提供者
@@ -42,10 +41,11 @@ public class DefaultDataPermissionUserDataProvider implements DataPermissionUser
public UserData getUserData() {
UserContext userContext = UserContextHolder.getContext();
UserData userData = new UserData();
userData.setUserId(Convert.toStr(userContext.getId()));
userData.setDeptId(Convert.toStr(userContext.getDeptId()));
userData.setRoles(CollUtils.mapToSet(userContext.getRoles(), r -> new RoleData(Convert.toStr(r
.getId()), DataScope.valueOf(r.getDataScope().name()))));
userData.setUserId(userContext.getId());
userData.setDeptId(userContext.getDeptId());
userData.setRoles(CollUtils.mapToSet(userContext.getRoles(), r -> new RoleData(r.getId(), DataScope.valueOf(r
.getDataScope()
.name()))));
return userData;
}
}

View File

@@ -22,7 +22,7 @@ import com.baomidou.mybatisplus.extension.parser.cache.JdkSerialCaffeineJsqlPars
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.crypto.password.PasswordEncoder;
import top.continew.starter.extension.datapermission.filter.DataPermissionUserDataProvider;
import top.continew.starter.extension.datapermission.provider.DataPermissionUserDataProvider;
import java.util.concurrent.TimeUnit;
@@ -62,6 +62,6 @@ public class MybatisPlusConfiguration {
*/
@Bean
public BCryptEncryptor bCryptEncryptor(PasswordEncoder passwordEncoder) {
return new BCryptEncryptor(passwordEncoder);
return new BCryptEncryptor(null, passwordEncoder);
}
}

View File

@@ -19,16 +19,8 @@ package top.continew.admin.common.util;
import cn.hutool.core.codec.Base64;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.extra.spring.SpringUtil;
import top.continew.admin.common.config.RsaProperties;
import top.continew.starter.core.exception.BusinessException;
import top.continew.starter.core.util.CollUtils;
import top.continew.starter.core.util.validation.ValidationUtils;
import top.continew.starter.security.crypto.autoconfigure.CryptoProperties;
import top.continew.starter.security.crypto.encryptor.AesEncryptor;
import top.continew.starter.security.crypto.encryptor.IEncryptor;
import java.util.List;
/**
* 加密/解密工具类
@@ -86,22 +78,4 @@ public class SecureUtils {
public static String decryptByRsaPrivateKey(String data, String privateKey) {
return new String(SecureUtil.rsa(privateKey, null).decrypt(Base64.decode(data), KeyType.PrivateKey));
}
/**
* 对普通加密字段列表进行AES加密优化starter加密模块后优化这个方法
*
* @param values 待加密内容
* @return 加密后内容
*/
public static List<String> encryptFieldByAes(List<String> values) {
IEncryptor encryptor = new AesEncryptor();
CryptoProperties properties = SpringUtil.getBean(CryptoProperties.class);
return CollUtils.mapToList(values, value -> {
try {
return encryptor.encrypt(value, properties.getPassword(), properties.getPublicKey());
} catch (Exception e) {
throw new BusinessException("字段加密异常");
}
});
}
}