diff --git a/src/main/java/com/jeesite/modules/util/LockUtils.java b/src/main/java/com/jeesite/modules/util/LockUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..e30dfcd88b852c4d541cf87e64caf6384f5b7bc3 --- /dev/null +++ b/src/main/java/com/jeesite/modules/util/LockUtils.java @@ -0,0 +1,39 @@ +package com.asiainfo.ai.gateway.util; + + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.concurrent.locks.ReentrantLock; + +public class LockUtils { + + private static final Logger log = LoggerFactory.getLogger(LockUtils.class); + + private static final ReentrantLock incrementLock = new ReentrantLock(); + + public static void lockIncrement() { + try { + log.info("推理服务访问次数Lock等待开启"); + incrementLock.lock(); + log.info("推理服务访问次数Lock已开启 "); + } + catch (Exception e) { + log.error("推理服务访问次数Lock开启失败:", e.getMessage()); + } + + } + + public static void unLockIncrement() { + try { + if (incrementLock.isLocked()) { + incrementLock.unlock(); + log.info("推理服务访问次数Lock已释放 "); + } + } + catch (Exception e) { + log.error("推理服务访问次数Lock释放失败:", e.getMessage()); + } + } + +} diff --git a/src/main/java/com/jeesite/modules/util/MD5Util.java b/src/main/java/com/jeesite/modules/util/MD5Util.java new file mode 100644 index 0000000000000000000000000000000000000000..0522d60800384b90c3d800974019e422d2567710 --- /dev/null +++ b/src/main/java/com/jeesite/modules/util/MD5Util.java @@ -0,0 +1,195 @@ +package com.asiainfo.ai.gateway.util; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.nio.ByteBuffer; +import java.nio.channels.FileChannel; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +/** + * MD5工具类,提供字符串MD5加密(校验)、文件MD5值获取(校验)功能。 + * @author zhaoxu + */ +public class MD5Util { + + /** + * 16进制字符集 + */ + private static final char[] HEX_DIGITS = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; + + /** + * 指定算法为MD5的MessageDigest + */ + private static MessageDigest messageDigest = null; + + static { + try { + messageDigest = MessageDigest.getInstance("MD5"); + } catch (NoSuchAlgorithmException ignored) { + + } + } + + /** + * 获取文件的MD5值 + * + * @param file 目标文件 + * @return MD5字符串 + */ + public static String getFileMD5String(File file) { + String ret = ""; + FileInputStream in = null; + FileChannel ch = null; + + try { + in = new FileInputStream(file); + ch = in.getChannel(); + ByteBuffer byteBuffer = ch.map(FileChannel.MapMode.READ_ONLY, 0, file.length()); + messageDigest.update(byteBuffer); + ret = bytesToHex(messageDigest.digest()); + } catch (IOException e) { + + } finally { + if (in != null) { + try { + in.close(); + } catch (IOException e) { + + } + } + + if (ch != null) { + try { + ch.close(); + } catch (IOException e) { + + } + } + } + + return ret; + } + + /** + * 获取文件的MD5值 + * + * @param fileName 目标文件的完整名称 + * @return MD5字符串 + */ + public static String getFileMD5String(String fileName) { + return getFileMD5String(new File(fileName)); + } + + /** + * MD5加密字符串 + * + * @param str 目标字符串 + * @return MD5加密后的字符串 + */ + public static String getMD5String(String str) { + return getMD5String(str.getBytes()); + } + + /** + * MD5加密以byte数组表示的字符串 + * + * @param bytes 目标byte数组 + * @return MD5加密后的字符串 + */ + public static String getMD5String(byte[] bytes) { + messageDigest.update(bytes); + return bytesToHex(messageDigest.digest()); + } + + /** + * 校验密码与其MD5是否一致 + * + * @param pwd 密码字符串 + * @param md5 基准MD5值 + * @return 检验结果 + */ + public static boolean checkPassword(String pwd, String md5) { + return getMD5String(pwd).equalsIgnoreCase(md5); + } + + /** + * 校验密码与其MD5是否一致 + * + * @param pwd 以字符数组表示的密码 + * @param md5 基准MD5值 + * @return 检验结果 + */ + public static boolean checkPassword(char[] pwd, String md5) { + return checkPassword(new String(pwd), md5); + } + + /** + * 检验文件的MD5值 + * + * @param file 目标文件 + * @param md5 基准MD5值 + * @return 检验结果 + */ + public static boolean checkFileMD5(File file, String md5) { + return getFileMD5String(file).equalsIgnoreCase(md5); + } + + /** + * 检验文件的MD5值 + * + * @param fileName 目标文件的完整名称 + * @param md5 基准MD5值 + * @return 检验结果 + */ + public static boolean checkFileMD5(String fileName, String md5) { + return checkFileMD5(new File(fileName), md5); + } + + /** + * 将字节数组转换成16进制字符串 + * + * @param bytes 目标字节数组 + * @return 转换结果 + */ + public static String bytesToHex(byte[] bytes) { + return bytesToHex(bytes, 0, bytes.length); + } + + /** + * 将字节数组中指定区间的子数组转换成16进制字符串 + * + * @param bytes 目标字节数组 + * @param start 起始位置(包括该位置) + * @param end 结束位置(不包括该位置) + * @return 转换结果 + */ + public static String bytesToHex(byte[] bytes, int start, int end) { + StringBuilder sb = new StringBuilder(); + + for (int i = start; i < start + end; i++) { + sb.append(byteToHex(bytes[i])); + } + + return sb.toString(); + } + + /** + * 将单个字节码转换成16进制字符串 + * + * @param bt 目标字节 + * @return 转换结果 + */ + public static String byteToHex(byte bt) { + return HEX_DIGITS[(bt & 0xf0) >> 4] + "" + HEX_DIGITS[bt & 0xf]; + } + + public static void main(String[] args) throws IOException { + long begin = System.currentTimeMillis(); + //String md5 = getFileMD5String(new File("F://003.rar")); + String md5 = getMD5String("admin").toLowerCase(); + long end = System.currentTimeMillis(); +// System.out.println("MD5:\t" + md5 + "\nTime:\t" + (end - begin) + "ms"); + } +}