From 4b7e86de8529e2e127ace1481e40bdd2d4d98709 Mon Sep 17 00:00:00 2001 From: yexuejc <1107047387@qq.com> Date: Sat, 12 May 2018 22:36:03 +0800 Subject: [PATCH] 1.0.1 --- README.md | 16 +- UPDATE.md | 16 + WIKI.md | 9 + pom.xml | 10 +- .../java/com/yexuejc/base/http/Resps.java | 12 + .../java/com/yexuejc/base/pojo/BaseVO.java | 1 + .../java/com/yexuejc/base/pojo/PagerVO.java | 49 +++ .../java/com/yexuejc/base/pojo/ParamsPO.java | 45 +++ .../java/com/yexuejc/base/util/StrUtil.java | 340 +++++++++++++----- 9 files changed, 398 insertions(+), 100 deletions(-) create mode 100644 UPDATE.md create mode 100644 WIKI.md create mode 100644 src/main/java/com/yexuejc/base/pojo/PagerVO.java create mode 100644 src/main/java/com/yexuejc/base/pojo/ParamsPO.java diff --git a/README.md b/README.md index 81fe728..92d3928 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,13 @@ 通用工具包 +###说明 +>1. 支持环境:java8 +>2. 该工具包基于springboot提取,按理说适用于所有java工程 +>3. 其中依赖jjwt、validation-api,但不传递依赖 + + ### 使用 ->yexuejc.base.version=1.0.0 +>yexuejc.base.version=1.0.1 pom.xml ``` @@ -18,4 +24,10 @@ pom.xml https://jitpack.io -``` \ No newline at end of file +``` + +### 工具文档 +[Wiki](WIKI.md) + +### 更新日志 +[更新记录](UPDATE.md) \ No newline at end of file diff --git a/UPDATE.md b/UPDATE.md new file mode 100644 index 0000000..359a4f4 --- /dev/null +++ b/UPDATE.md @@ -0,0 +1,16 @@ +yexuejc-base 更新记录 +------------------ + +#### version :1.0.1 +**time:** 2018-5-12 22:25:05
+**branch:** master
+**update:**
+>1.添加支持加密功能 +# + +#### version :1.0.0 +**time:** 2018-1-31 12:16:10
+**branch:** master
+**update:**
+>1.基于java8开发的web应用工具包 +# \ No newline at end of file diff --git a/WIKI.md b/WIKI.md new file mode 100644 index 0000000..7894877 --- /dev/null +++ b/WIKI.md @@ -0,0 +1,9 @@ +yexuejc-base 文档 +------------------ + +##### 1. RespsConsts 网络请求统一返回 常量 +##### 2. Resps 网络请求统一返回类 +##### 3. ApiVO 接口交互API +##### 4. BaseVO 基类VO + +待完善...... \ No newline at end of file diff --git a/pom.xml b/pom.xml index c46e416..f67620c 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.yexuejc.base yexuejc-base - 1.0.0 + 1.0.1 ${project.artifactId} @@ -20,6 +20,7 @@ 0.7.0 true 1.8 + 1.1.0.Final @@ -30,6 +31,13 @@ ${jjwt.version} true + + + javax.validation + validation-api + ${validation-api.version} + true + diff --git a/src/main/java/com/yexuejc/base/http/Resps.java b/src/main/java/com/yexuejc/base/http/Resps.java index 07e4a3f..49d9e95 100644 --- a/src/main/java/com/yexuejc/base/http/Resps.java +++ b/src/main/java/com/yexuejc/base/http/Resps.java @@ -20,6 +20,10 @@ public class Resps implements Serializable { * 状态 */ private String code; + /** + * md5码 + */ + private String sign; /** * 内容 */ @@ -133,6 +137,14 @@ public class Resps implements Serializable { this.msg = msg; } + public String getSign() { + return sign; + } + + public void setSign(String sign) { + this.sign = sign; + } + @Override public String toString() { return JsonUtil.obj2Json(this); diff --git a/src/main/java/com/yexuejc/base/pojo/BaseVO.java b/src/main/java/com/yexuejc/base/pojo/BaseVO.java index c57e0cc..df49887 100644 --- a/src/main/java/com/yexuejc/base/pojo/BaseVO.java +++ b/src/main/java/com/yexuejc/base/pojo/BaseVO.java @@ -5,6 +5,7 @@ import com.yexuejc.base.util.JsonUtil; import java.io.Serializable; /** + * 基类VO * @PackageName: com.yexuejc.util.base.pojo * @Description: * @author: maxf diff --git a/src/main/java/com/yexuejc/base/pojo/PagerVO.java b/src/main/java/com/yexuejc/base/pojo/PagerVO.java new file mode 100644 index 0000000..3e20341 --- /dev/null +++ b/src/main/java/com/yexuejc/base/pojo/PagerVO.java @@ -0,0 +1,49 @@ +package com.yexuejc.base.pojo; + +import com.yexuejc.base.util.JsonUtil; + +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; + +/** + * 分页 VO + * + * @author: maxf + * @date: 2018/3/28 14:23 + */ +public class PagerVO extends BaseVO { + + private static final long serialVersionUID = 3490440129554644587L; + + @NotNull + @Min(1L) + private Integer page = 1; + @NotNull + @Min(1L) + private Integer size = 20; + + public int getOffset() { + return (this.page - 1) * this.size; + } + + @Override + public String toString() { + return JsonUtil.obj2Json(this); + } + + public Integer getPage() { + return page; + } + + public void setPage(Integer page) { + this.page = page; + } + + public Integer getSize() { + return size; + } + + public void setSize(Integer size) { + this.size = size; + } +} diff --git a/src/main/java/com/yexuejc/base/pojo/ParamsPO.java b/src/main/java/com/yexuejc/base/pojo/ParamsPO.java new file mode 100644 index 0000000..8fea4e9 --- /dev/null +++ b/src/main/java/com/yexuejc/base/pojo/ParamsPO.java @@ -0,0 +1,45 @@ +package com.yexuejc.base.pojo; + +import com.yexuejc.base.util.JsonUtil; + +import java.io.Serializable; + +/** + * 解密前的请求参数格式 + * + * @author: maxf + * @date: 2018/5/12 14:52 + */ +public class ParamsPO implements Serializable { + private static final long serialVersionUID = 9171765814642105098L; + + /** + * 参数 + */ + private String data; + /** + * md5 + */ + private String sign; + + @Override + public String toString() { + return JsonUtil.obj2Json(this); + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } + + public String getSign() { + return sign; + } + + public void setSign(String sign) { + this.sign = sign; + } +} diff --git a/src/main/java/com/yexuejc/base/util/StrUtil.java b/src/main/java/com/yexuejc/base/util/StrUtil.java index f556b4b..84caefc 100644 --- a/src/main/java/com/yexuejc/base/util/StrUtil.java +++ b/src/main/java/com/yexuejc/base/util/StrUtil.java @@ -3,37 +3,52 @@ package com.yexuejc.base.util; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; +import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; -import static java.util.regex.Pattern.compile; - /** - * @PackageName: com.yexuejc.util.base.util + * 字符串工具类 + * + * @ClassName: StrUtil * @Description: * @author: maxf - * @date: 2017/12/28 17:34 + * @date: 2018/5/12 19:13 */ public final class StrUtil { - public static char[] HEX_CHAR = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', - 'e', 'f'}; - - private StrUtil() { - } + public static char[] HEX_CHAR = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; + /** + * 判断字符串,数组,集合 是否为空 + * + * @param obj + * @return + */ public static boolean isEmpty(Object obj) { if (obj instanceof String) { - return obj == null || "".equals((String) obj); + if (obj == null || "".equals((String) obj)) { + return true; + } else { + return false; + } } else if (obj instanceof Object[]) { - return obj == null || ((Object[]) ((Object[]) obj)).length == 0; - } else if (obj instanceof Collection) { - return obj == null || ((Collection) obj).size() == 0; + if (obj == null || ((Object[]) obj).length == 0) { + return true; + } else { + return false; + } + } else if (obj instanceof Collection) { + if (obj == null || ((Collection) obj).size() == 0) { + return true; + } else { + return false; + } } else { - return obj == null; + if (obj == null) { + return true; + } else { + return false; + } } } @@ -41,10 +56,23 @@ public final class StrUtil { return !isEmpty(obj); } + /** + * 生成UUID + * + * @return + */ public static String genUUID() { return UUID.randomUUID().toString().replaceAll("-", ""); } + /** + * 生成11位编号,可以用作订单号,有很小几率出现重复,需要做异常处理
+ * 左边第一位为正负标识:正数1 负数0
+ * 剩余位数为UUID的hashcode值
+ * 可以再生成的编号基础上嵌入其他标识编码 + * + * @return + */ public static String genNum() { int hashCode = UUID.randomUUID().toString().hashCode(); StringBuffer num = new StringBuffer(); @@ -54,131 +82,215 @@ public final class StrUtil { } else { num.append("1"); } - return num.append(String.format("%010d", hashCode)).toString().substring(0, 8); } + /** + * 解析aa=bb&cc=dd&ee=ff格式的字符串,返回HashMap + * + * @param urlencoded + * @return + */ public static Map parseUrlencoded(String urlencoded) { if (isEmpty(urlencoded)) { return null; - } else { - String[] entrys = urlencoded.split("&"); - if (isEmpty(entrys)) { - return null; + } + String[] entrys = urlencoded.split("&"); + if (isEmpty(entrys)) { + return null; + } + + Map map = new HashMap(); + String[] kv = null; + for (String entry : entrys) { + if (isEmpty(entry)) { + continue; + } + kv = entry.split("="); + if (isEmpty(kv)) { + continue; + } + if (kv.length > 1) { + map.put(kv[0], kv[1]); } else { - Map map = new HashMap(); - String[] kv = null; - String[] var4 = entrys; - int var5 = entrys.length; - - for (int var6 = 0; var6 < var5; ++var6) { - String entry = var4[var6]; - if (!isEmpty(entry)) { - kv = entry.split("="); - if (!isEmpty(kv)) { - if (kv.length > 1) { - map.put(kv[0], kv[1]); - } else { - map.put(kv[0], null); - } - } - } - } - - return map; + map.put(kv[0], null); } } + return map; } - public static String toHex(byte[] buf) { + /** + * 字符串转换方法 把字节数组转换成16进制字符串 + * + * @param buf 初始字节数组 + * @return 转换后字符串 + */ + public static String toHex(byte buf[]) { StringBuffer strbuf = new StringBuffer(buf.length * 2); - - for (int i = 0; i < buf.length; ++i) { - if ((buf[i] & 255) < 16) { + int i; + for (i = 0; i < buf.length; i++) { + if (((int) buf[i] & 0xff) < 0x10) { strbuf.append("0"); } - - strbuf.append(Long.toString((long) (buf[i] & 255), 16)); + strbuf.append(Long.toString((int) buf[i] & 0xff, 16)); } - return strbuf.toString(); } + /** + * 获取字符串的MD5码 + * + * @param str + * @return + */ public static String toMD5(String str) { if (str == null) { return null; - } else { - MessageDigest md = null; - - try { - md = MessageDigest.getInstance("MD5"); - } catch (NoSuchAlgorithmException var3) { - var3.printStackTrace(); - return null; - } - - md.update(str.getBytes()); - byte[] tmp = md.digest(); - return toHex(tmp); } + MessageDigest md = null; + try { + md = java.security.MessageDigest.getInstance("MD5"); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + return null; + } + md.update(str.getBytes()); + byte tmp[] = md.digest(); + return toHex(tmp); } + /** + * SHA256加密 + * + * @param str + * @return + */ + public static String toSHA256(final String str) { + return toSHA(str, "SHA-256"); + } + + /** + * SHA加密 + * + * @param str + * @param key + * @return + */ + public static String toSHA(final String str, final String key) { + // 是否是有效字符串 + if (str == null) { + return null; + } + MessageDigest messageDigest = null; + try { + messageDigest = MessageDigest.getInstance(key); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + return null; + } + messageDigest.update(str.getBytes()); + byte tmp[] = messageDigest.digest(); + return toHex(tmp); + } + + /** + * 用ISO-8859-1解码 再用UFT-8编码 + * + * @param str + * @return + */ public static String iso2utf(String str) { String utfStr = null; - try { utfStr = new String(str.getBytes("ISO-8859-1"), "utf-8"); - } catch (UnsupportedEncodingException var3) { - var3.printStackTrace(); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); } - return utfStr; } + /** + * 判断字符串是否是数字 + * + * @param str + * @return + */ public static boolean isNumeric(String str) { - Pattern pattern = compile("[0-9]*"); + Pattern pattern = Pattern.compile("[0-9]*"); Matcher isNum = pattern.matcher(str); - return isNum.matches(); + if (!isNum.matches()) { + return false; + } + return true; } + /** + * 对ID(32位)进行编码 + * + * @param id + * @return + */ public static String codeId(String id) { - if (id != null && id.length() == 32) { - StringBuilder coded = new StringBuilder(); - - int i; - for (i = 0; i < 13; ++i) { - coded.append(HEX_CHAR[(int) (Math.random() * 15.0D) + 1]); - } - - coded.append(id.substring(0, 11)); - - for (i = 0; i < 7; ++i) { - coded.append(HEX_CHAR[(int) (Math.random() * 15.0D) + 1]); - } - - coded.append(id.substring(11)); - - for (i = 0; i < 12; ++i) { - coded.append(HEX_CHAR[(int) (Math.random() * 15.0D) + 1]); - } - - return coded.toString(); - } else { + if (id == null || id.length() != 32) { return id; } + + StringBuilder coded = new StringBuilder(); + for (int i = 0; i < 13; i++) { + coded.append(HEX_CHAR[(int) (Math.random() * 15L) + 1]); + } + coded.append(id.substring(0, 11)); + for (int i = 0; i < 7; i++) { + coded.append(HEX_CHAR[(int) (Math.random() * 15L) + 1]); + } + coded.append(id.substring(11)); + for (int i = 0; i < 12; i++) { + coded.append(HEX_CHAR[(int) (Math.random() * 15L) + 1]); + } + + return coded.toString(); } + /** + * 对ID(32位)进行解码 + * + * @param coded + * @return + */ public static String decodeId(String coded) { - if (coded != null && coded.length() == 64) { - StringBuilder id = new StringBuilder(); - id.append(coded.substring(13, 24)); - id.append(coded.substring(31, 52)); - return id.toString(); - } else { + if (coded == null || coded.length() != 64) { return coded; } + + StringBuilder id = new StringBuilder(); + id.append(coded.substring(13, 24)); + id.append(coded.substring(31, 52)); + + return id.toString(); } + /** + * map parameters 转url parameters + * + * @param sortedParams + * @return + */ + public static String getSignContent(Map sortedParams) { + StringBuffer content = new StringBuffer(); + List keys = new ArrayList<>(sortedParams.keySet()); + Collections.sort(keys); + int index = 0; + + for (int i = 0; i < keys.size(); ++i) { + String key = keys.get(i); + Object value = sortedParams.get(key); + if (isNotEmpty(key) && isNotEmpty(value)) { + content.append((index == 0 ? "" : "&") + key + "=" + value); + ++index; + } + } + return content.toString(); + } /** * 替换手机号中间4位为* @@ -192,4 +304,38 @@ public final class StrUtil { public static String replaceMobile(String mobile) { return mobile.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2"); } + + /** + * map 排序 + * + * @param sortedParams + * @return + */ + public static Map mapSort(Map sortedParams) { + Map map = new HashMap<>(); + List keys = new ArrayList<>(sortedParams.keySet()); + Collections.sort(keys); + int index = 0; + for (int i = 0; i < keys.size(); ++i) { + String key = keys.get(i); + Object value = sortedParams.get(key); + map.put(key, value); + ++index; + } + return map; + } + + /** + * 设置Str带默认值 + * + * @param msg + * @param defMsg + * @return + */ + public static String setStr(String msg, String defMsg) { + if (StrUtil.isEmpty(msg)) { + return defMsg; + } + return msg; + } }