diff --git a/src/main/java/com/rekoe/utils/EncryptUtil.java b/src/main/java/com/rekoe/utils/EncryptUtil.java new file mode 100644 index 0000000..a9b0a8e --- /dev/null +++ b/src/main/java/com/rekoe/utils/EncryptUtil.java @@ -0,0 +1,118 @@ +package com.rekoe.utils; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +/** + * 加密工具 + * + * @author Huiwu Yuan + * @since 1.0 + */ +public class EncryptUtil { + /** + * + */ + private static final String cvt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz0123456789#@$"; + + /** + * + */ + private static final int fillchar = '*'; + + /** + * 加密 + * + * @param str + * 明文 + * @return 密文 + */ + public static String encrypt(String str) { + byte[] data = str.getBytes(); + int c; + int len = data.length; + StringBuffer ret = new StringBuffer(((len / 3) + 1) * 4); + for (int i = 0; i < len; ++i) { + c = (data[i] >> 2) & 0x3f; + ret.append(cvt.charAt(c)); + c = (data[i] << 4) & 0x3f; + if (++i < len) { + c |= (data[i] >> 4) & 0x0f; + } + ret.append(cvt.charAt(c)); + if (i < len) { + c = (data[i] << 2) & 0x3f; + if (++i < len) { + c |= (data[i] >> 6) & 0x03; + } + ret.append(cvt.charAt(c)); + } else { + ++i; + ret.append((char) fillchar); + } + if (i < len) { + c = data[i] & 0x3f; + ret.append(cvt.charAt(c)); + } else { + ret.append((char) fillchar); + } + } + return ret.toString(); + } + + /** + * 解密 + * + * @param str + * 密文 + * @return 明文 + */ + public static String decrypt(String str) { + byte[] data = str.getBytes(); + int c, c1; + int len = data.length; + StringBuffer ret = new StringBuffer((len * 3) / 4); + for (int i = 0; i < len; ++i) { + c = cvt.indexOf(data[i]); + ++i; + c1 = cvt.indexOf(data[i]); + c = ((c << 2) | ((c1 >> 4) & 0x3)); + ret.append((char) c); + if (++i < len) { + c = data[i]; + if (fillchar == c) { + break; + } + c = cvt.indexOf((char) c); + c1 = ((c1 << 4) & 0xf0) | ((c >> 2) & 0xf); + ret.append((char) c1); + } + if (++i < len) { + c1 = data[i]; + if (fillchar == c1) { + break; + } + c1 = cvt.indexOf((char) c1); + c = ((c << 6) & 0xc0) | c1; + ret.append((char) c); + } + } + return ret.toString(); + } + + /** + * apache SHA1 加密 + * + * @param str + * 明文 + * @return 密文 + */ + public static String encriptSHA1(String str) { + try { + return new sun.misc.BASE64Encoder().encode(MessageDigest.getInstance("SHA1").digest(str.getBytes())); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + throw new RuntimeException(e); + } + } +} diff --git a/src/main/java/com/rekoe/utils/UsrProvider.java b/src/main/java/com/rekoe/utils/UsrProvider.java new file mode 100644 index 0000000..ef7a0f4 --- /dev/null +++ b/src/main/java/com/rekoe/utils/UsrProvider.java @@ -0,0 +1,43 @@ +/** + * + */ +package com.rekoe.utils; + +import com.rekoe.domain.Usr; + +/** + * 为当前的线程提供登录的用户 + * + */ +public class UsrProvider { + + private static final ThreadLocal USR_THREAD_LOCAL = new ThreadLocal(); + + /** + * @return 当前的用户 + */ + public static Usr getCurrentUsr() { + Usr usr = USR_THREAD_LOCAL.get(); + if (usr == null) { + throw new RuntimeException("当前线程没有设置用户!"); + } + return usr; + } + + /** + * 设置当前的用户到当前线程中 + * + * @param usr + * 用户 + */ + public static void setUsr(Usr usr) { + USR_THREAD_LOCAL.set(usr); + } + + /** + * 清空线程的用户 + */ + public static void removeUsr() { + USR_THREAD_LOCAL.remove(); + } +}