mica 核心包

功能

  1. Cglib Bean copy 增强,支持链式 bean、Map、优化性能和支持类型转换。
  2. 表单枚举接收增强,同 jackson 保持一致。
  3. 服务异常。
  4. 统一返回模型。
  5. 常用工具包。

添加依赖

maven

xml
<dependency>
  <groupId>net.dreamlu</groupId>
  <artifactId>mica-core</artifactId>
  <version>${version}</version>
</dependency>

gradle

groovy
compile("net.dreamlu:mica-core:${version}")

工具类说明

常量池

类名说明
Charsets字符集常量池
CharPoolChar常量池
StringPool字符串常量池

常用工具类

类名说明
StringUtil字符串工具类
ObjectUtilObject工具类
JsonUtiljson处理工具
DateUtil时间处理工具
BeanUtilbean处理工具
NumberUtilNumber工具类
CollectionUtil集合工具类
FileUtilFile工具类
IoUtilio工具类

签名加密工具类

类名说明
HexUtilhex工具类
DigestUtilmd5、sha、hmc等
Base64UtilBase64
AesUtilAes
DesUtilDes
RsaUtilRsa

类、反射工具

类名说明
ClassUtil类工具类
ConvertUtil类型转换工具类
ReflectUtil反射工具类

线程、异常等工具类

类名说明
ThreadUtil线程工具类
ThreadLocalUtil本地线程工具类
Exceptions异常处理工具类
Uncheckedlambda 异常包装类

其他工具类

类名说明
CountMap计数器
Lazy延迟加载
Once一次加载
Holder部分常量
VersionVersion工具
XmlHelperxml处理
INetUtil网络工具类
PathUtil路径工具类
ResourceUtil资源工具类
SystemUtil系统工具类
RuntimeUtil系统运行时工具类
UrlUtilurl工具类
WebUtilweb工具类

扩展阅读

AesUtil <-> js 互通

javascript
/**
 * 使用:https://github.com/brix/crypto-js
 *
 * 或者直接导入下面这2个 js
 * <script src="https://cdn.bootcss.com/crypto-js/4.0.0/crypto-js.min.js"></script>
 * <script src="https://cdn.bootcss.com/crypto-js/4.0.0/aes.min.js"></script>
 */

/**
 * aes 解密方法,同java:AesUtil.decryptFormBase64ToString(encrypt, aesKey);
 */
function decrypt(data, key) {
    let keyBytes = CryptoJS.enc.Utf8.parse(key);
    let decrypted = CryptoJS.AES.decrypt(data, keyBytes, {
        iv: keyBytes,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    });
    return CryptoJS.enc.Utf8.stringify(decrypted);
}

/**
 * aes 加密方法,同java:AesUtil.encryptToBase64(text, aesKey);
 */
function encrypt(data, key) {
    let dataBytes = CryptoJS.enc.Utf8.parse(data);
    let keyBytes = CryptoJS.enc.Utf8.parse(key);
    let encrypted = CryptoJS.AES.encrypt(dataBytes, keyBytes, {
        iv: keyBytes,
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7
    });
    return CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
}

console.log('aes 加密', encrypt('我爱mica', 'dIK8YXdYaVasUyq1LvUoxCpgPKthHtAW'));
console.log('aes 解密', decrypt('m44gDqhWr86Vl1V0ORNShA==', 'dIK8YXdYaVasUyq1LvUoxCpgPKthHtAW'));

AesUtil <-> dart 互通

dart
import 'package:encrypt/encrypt.dart';

void main(List<String> arguments) {
  // 明文数据和密钥
  final plainText = '{"auPhone":"10008376857","auPassword":"123456"}';
  final plainKey = 'eELB8HbcgKWkndH0g9qRcBMZG5zgPkMc';

  // 初始化加密工具
  final key = Key.fromUtf8(plainKey);
  final iv = IV.fromUtf8(plainKey.substring(0, 16));
  final encrypter = Encrypter(AES(key, mode: AESMode.cbc));

  // dart 端加密
  final encrypted = encrypter.encrypt(plainText, iv: iv);
  print(encrypted.bytes);
  print(encrypted.base64);

  // 解密 java 端密文 AesUtil.encryptToBase64
  final javaEncryptedText = 'BLo1Q73NNBWMxpqBF66sKrI+PYfikhD5YU2O0A+tkBRuiy1FkPxSnxUHw5rV2QZK';
  final decrypted = encrypter.decrypt64(javaEncryptedText, iv: iv);

  print(decrypted);
}

DesUtil <-> js 互通

javascript
/**
 * 使用:https://github.com/brix/crypto-js
 *
 * 或者直接导入下面这2个 js
 * <script src="https://cdn.bootcss.com/crypto-js/4.0.0/crypto-js.min.js"></script>
 * <script src="https://cdn.bootcss.com/crypto-js/4.0.0/aes.min.js"></script>
 */

/**
 * des 解密方法,同java:DesUtil.encryptToBase64(text, aesKey)
 */
function encrypt(data, key) {
    var keyHex = CryptoJS.enc.Utf8.parse(key);
    var encrypted = CryptoJS.DES.encrypt(data, keyHex, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    });
    return encrypted.toString();
}

/**
 * des 加密方法,同java:DesUtil.decryptFormBase64(encryptBase64, aesKey);
 */
function decrypt(data, key) {
    var keyHex = CryptoJS.enc.Utf8.parse(key);
    var decrypted = CryptoJS.DES.decrypt({
        ciphertext: CryptoJS.enc.Base64.parse(data)
    }, keyHex, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    });
    return decrypted.toString(CryptoJS.enc.Utf8);
}

console.log('des 加密', encrypt('我爱mica', 'QLPz39vD2Nkf9A4E'));
console.log('des 解密', decrypt('49o5mK4KQGGAYY4IwoOG4A==', 'QLPz39vD2Nkf9A4E'));

RsaUtil <-> js 互通

javascript
/**
 * 使用:https://github.com/travist/jsencrypt
 *
 * 或者直接导入下面这个 js
 * <script src="https://cdn.bootcss.com/jsencrypt/2.3.0/jsencrypt.js"></script>
 */

/**
 * 前端加密
 *
 * <p>
 * 对应java解密方法为:
 * String decrypt = RsaUtil.decryptFromBase64(privateBase64, data);
 * </p>
 */
function encrypt(data, publicKey) {
    var encrypt = new JSEncrypt();
    encrypt.setPublicKey(publicKey);
    return encrypt.encrypt(data);
}

// 注意:解密老解不出来,不折腾了,谁有需求到时候再研究