目录
激活码生成工具
数据连接池
发送邮件
Md5加密简单版
Md5加密完全版
文本字符串判断工具
Base64加密工具
事务处理连接池
生成令牌工具
使用移除令牌工具
上传文件工具
数字验证码
普通验证码
cookie删除和添加工具
json工具类
异常处理器
解锁定时器任务工具类
文件上传拦截器
EXCEL工具
ES分页工具
激活码生产工具
public class RandomUtils {
//当前时间 + 随机数
public static String createActive(){
return getTime()+Integer.toHexString(new Random().nextInt(900)+100);
}
private static String getTime(){
return new SimpleDateFormat("yyyyMMddHHmmssSSS").format(Calendar.getInstance().getTime());
}
//生成订单编号
public static String createOrderId(){
return getTime();
}
}
数据连接池
public class DruidUtils {
private static DruidDataSource dataSource;
static {
Properties properties = new Properties();
InputStream is = DruidUtils.class.getClassLoader().getResourceAsStream("druid.properties");
try {
properties.load(is);
dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("初始化连接池失败", e);
}
}
public static DataSource getDataSource() {
return dataSource;
}
}
发送邮件工具
public class EmailUtils {
public static void sendEmail(User user){
//发送方
String myAccount = "renjie9283@163.com";
//授权码,需要到自己邮箱去生成
String myPass = "cq1701";
//发件人 邮箱的 SMTP 服务器地址,如果是qq邮箱则改成smtp.qq.com
String SMTPHost = "smtp.163.com";
//组成 properties
Properties prop = new Properties();
prop.setProperty("mail.transport.protocol", "smtp");//设置协议类型
prop.setProperty("mail.smtp.host", SMTPHost);//定义发件人的邮箱服务器地址
prop.setProperty("mail.smtp.auth", "true");//设置请求验证
//1.Session对象 创建会话 用于和邮箱服务器进行交互
Session session = Session.getDefaultInstance(prop);
//设置debug模式 可以查看详细发送信息 可略
session.setDebug(true);
//2.创建方法 用来组成一封完整的邮件
//参数 session(参数配置), myAccount 发送方 , user.getEmail() 接收方
MimeMessage message = createMsg(session,myAccount,user);
//4.利用Transport 发送邮件
try {
Transport tran = session.getTransport();
//连接服务器 确认发送方 是否授权
tran.connect(myAccount, myPass);
//发送邮件 将message 对象 传给 Transport 对象 将邮件发送出去
//参数1 要发的内容 参数2 要给哪些人发
//message.getAllRecipients() 获取到所有的收件人 | 抄送 | 密送
tran.sendMessage(message, message.getAllRecipients());
//关闭连接
tran.close();
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static MimeMessage createMsg(Session session, String myAccount, User user) {
//使用session对象 获取待发送的邮件信息
MimeMessage message = new MimeMessage(session);
//3.设置发件人 收件人 标题 邮件内容 附件 发送时间等等
try {
//3.1发件人 from
message.setFrom(new InternetAddress(myAccount, "小米", "utf-8"));
//3.2收件人 to 支持可以添加多个收件人 | 抄送 | 密送 如果想要发送给多个人 可以重复下面代码多次
/*
* MimeMessage.RecipientType.TO 发送
* MimeMessage.RecipientType.CC 抄送
* MimeMessage.RecipientType.BCC 密送
* */
message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(user.getEmail(), user.getUsername(), "utf-8"));
//3.3生成邮件主题
message.setSubject("小米商城账号激活邮件","utf-8");
String ip = Inet4Address.getLocalHost().getHostAddress();
String url = "http://"+ip+":8080/myxiaomi/activate?e="+ Base64Utils.encode(user.getEmail())+"&c="+Base64Utils.encode(user.getCode());
//设置邮件正文 setContent 可以使用html标签
message.setContent(user.getUsername()+",你好<br>欢迎注册小米商城! 请点击链接进行激活:<a href='"+url+"'>"+url+"</a>","text/html;charset=utf-8");
//设置邮件的发送时间 是立即发送
message.setSentDate(new Date());
//保存设置
message.saveChanges();
} catch (UnsupportedEncodingException | MessagingException | UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return message;
}
}
MD5加密简单版
public class MD5Utils {
public static String md5(String str) {
try {
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
messageDigest.update(str.getBytes("utf-8"));
byte[] digest = messageDigest.digest();
//1表示正数
BigInteger bigInteger = new BigInteger(1, digest);
return bigInteger.toString(16);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
MD5加密完全版
public class Md5Util {
public static final String SIGN_KEY = "sign_key";//签名key
public static final String PARAMETER_KEY = "parameter_key";//拼装的参数key
/**
* 新的md5签名,首尾放secret。
*
* @param key 商家key
* tradeNo 流水号
* secret
* @param key 分配给您的APP_SECRET
*/
public static String md5Signature(long id, String tradeNo,
String key) {
StringBuffer sb = new StringBuffer();
sb.append(key);
sb.append(id);
sb.append(tradeNo);
sb.append(key);
MessageDigest md = null;
try {
md = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
String result = null;
try {
result = byte2hex(md.digest(sb.toString().getBytes("utf-8")));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return result;
}
/**
* 二行制转字符串
*/
private static String byte2hex(byte[] b) {
StringBuffer hs = new StringBuffer();
String stmp = "";
for (int n = 0; n < b.length; n++) {
stmp = (Integer.toHexString(b[n] & 0XFF));
if (stmp.length() == 1)
hs.append("0").append(stmp);
else
hs.append(stmp);
}
return hs.toString().toUpperCase();
}
/***
* 对请求的参数排序,生成定长的签名
* @param paramsMap 排序后的字符串
* @param secret 密钥
* */
public static String md5Signature(Map<String, String> paramsMap, String secret) {
Map<String, String> resultMap = new HashMap<String, String>();//用于记录返回的签名和将参数按照签名拼装的url
String result = "";
StringBuilder sb = new StringBuilder();
Map<String, String> treeMap = new TreeMap<String, String>();
treeMap.putAll(paramsMap);
sb.append(secret);
Iterator<String> iterator = treeMap.keySet().iterator();
while (iterator.hasNext()) {
String name = (String) iterator.next();
sb.append(name).append(treeMap.get(name));
}
sb.append(secret);
resultMap.put(PARAMETER_KEY, sb.toString());
try {
MessageDigest md = MessageDigest.getInstance("MD5"); /**MD5加密,输出一个定长信息摘要*/
result = byte2hex(md.digest(sb.toString().getBytes("utf-8")));
} catch (Exception e) {
throw new RuntimeException("sign error !");
}
resultMap.put(SIGN_KEY, result);
return result;
}
/**
* Calculates the MD5 digest and returns the value as a 16 element
* <code>byte[]</code>.
*
* @param data Data to digest
* @return MD5 digest
*/
public static byte[] md5(String data) {
return md5(data.getBytes());
}
/**
* Calculates the MD5 digest and returns the value as a 16 element
* <code>byte[]</code>.
*
* @param data Data to digest
* @return MD5 digest
*/
public static byte[] md5(byte[] data) {
return getDigest().digest(data);
}
/**
* Returns a MessageDigest for the given <code>algorithm</code>.
*
* @param
* @return An MD5 digest instance.
* @throws RuntimeException when a {@link NoSuchAlgorithmException} is
* caught
*/
static MessageDigest getDigest() {
try {
return MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}
}
文本字符串判断工具
public class StringUtils {
public static boolean isEmpty(String str) {
if (str == null || str.trim().length() == 0) {
return true;
} else {
return false;
}
}
}
Base64加密工具
public class Base64Utils {
//base64编码
public static String encode(String msg){
return Base64.getEncoder().encodeToString(msg.getBytes());
}
//base64解码
public static String decode(String msg){
return new String(Base64.getDecoder().decode(msg)