198 lines
6.8 KiB
Java
198 lines
6.8 KiB
Java
package com.rymcu.vertical.util;
|
||
|
||
import com.github.pagehelper.PageInfo;
|
||
import com.rymcu.vertical.dto.ArticleDTO;
|
||
import com.rymcu.vertical.dto.NotificationDTO;
|
||
import com.rymcu.vertical.entity.Notification;
|
||
import com.rymcu.vertical.entity.User;
|
||
import org.apache.shiro.SecurityUtils;
|
||
import org.apache.shiro.session.InvalidSessionException;
|
||
import org.apache.shiro.session.Session;
|
||
import org.apache.shiro.subject.Subject;
|
||
import org.springframework.core.env.Environment;
|
||
|
||
import javax.servlet.http.HttpServletRequest;
|
||
import java.time.*;
|
||
import java.util.Date;
|
||
import java.util.HashMap;
|
||
import java.util.Map;
|
||
|
||
/**
|
||
* @author ronger
|
||
*/
|
||
public class Utils {
|
||
public static final String HASH_ALGORITHM = "SHA-1";
|
||
public static final String UNKOWN = "unknown";
|
||
public static final int HASH_INTERATIONS = 1024;
|
||
public static final int SALT_SIZE = 8;
|
||
|
||
private static Environment env = SpringContextHolder.getBean(Environment.class);
|
||
|
||
/**
|
||
* 生成安全的密码,生成随机的16位salt并经过1024次 sha-1 hash
|
||
*/
|
||
public static String entryptPassword(String plainPassword) {
|
||
String plain = Encodes.unescapeHtml(plainPassword);
|
||
byte[] salt = Digests.generateSalt(SALT_SIZE);
|
||
byte[] hashPassword = Digests.sha1(plain.getBytes(), salt, HASH_INTERATIONS);
|
||
return Encodes.encodeHex(salt)+Encodes.encodeHex(hashPassword);
|
||
}
|
||
|
||
/**
|
||
*一般检查工具密码比对 add by xlf 2018-11-8
|
||
* @param pwd
|
||
* @param enpwd 加密的密码
|
||
* @return
|
||
*/
|
||
public static boolean comparePwd(String pwd,String enpwd){
|
||
byte[] salt = Encodes.decodeHex(enpwd.substring(0,16));
|
||
byte[] hashPassword = Digests.sha1(pwd.getBytes(), salt, HASH_INTERATIONS);
|
||
return enpwd.equals(Encodes.encodeHex(salt)+Encodes.encodeHex(hashPassword));
|
||
}
|
||
|
||
public static User getCurrentUser() {
|
||
return null;
|
||
}
|
||
|
||
public static Session getSession() {
|
||
try{
|
||
Subject subject = SecurityUtils.getSubject();
|
||
Session session = subject.getSession(false);
|
||
if (session == null){
|
||
session = subject.getSession();
|
||
}
|
||
if (session != null){
|
||
return session;
|
||
}
|
||
subject.logout();
|
||
}catch (InvalidSessionException e){
|
||
|
||
}
|
||
return null;
|
||
}
|
||
|
||
public static Integer genCode() {
|
||
Integer code = (int)((Math.random()*9+1)*100000);
|
||
return code;
|
||
}
|
||
|
||
/**
|
||
* 获取配置文件内属性
|
||
* @param key 键值
|
||
* @return 属性值
|
||
* */
|
||
public static String getProperty(String key){
|
||
return env.getProperty(key);
|
||
}
|
||
|
||
public static String getTimeAgo(Date date) {
|
||
|
||
String timeAgo;
|
||
|
||
Instant instant = date.toInstant();
|
||
ZoneId zone = ZoneId.systemDefault();
|
||
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);
|
||
LocalDate oldLocalDate = localDateTime.toLocalDate();
|
||
|
||
LocalDate today = LocalDate.now();
|
||
|
||
Period p = Period.between(oldLocalDate, today);
|
||
if(p.getYears() > 0){
|
||
timeAgo = p.getYears()+" 年前 ";
|
||
}else if(p.getMonths() > 0){
|
||
timeAgo = p.getMonths()+" 月前 ";
|
||
}else if(p.getDays() > 0){
|
||
timeAgo = p.getDays()+" 天前 ";
|
||
}else {
|
||
long to = System.currentTimeMillis();
|
||
long from = date.getTime();
|
||
int hours = (int) ((to - from)/(1000 * 60 * 60));
|
||
if(hours > 0){
|
||
timeAgo = hours+" 小时前 ";
|
||
}else {
|
||
int minutes = (int) ((to - from)/(1000 * 60));
|
||
if(minutes == 0){
|
||
timeAgo = " 刚刚 ";
|
||
}else {
|
||
timeAgo = minutes+" 分钟前 ";
|
||
}
|
||
}
|
||
}
|
||
return timeAgo;
|
||
}
|
||
|
||
public static Map getPagination(PageInfo pageInfo) {
|
||
Map pagination = new HashMap(3);
|
||
pagination.put("pageSize",pageInfo.getPageSize());
|
||
pagination.put("total",pageInfo.getTotal());
|
||
pagination.put("currentPage",pageInfo.getPageNum());
|
||
return pagination;
|
||
}
|
||
|
||
public static void main(String[] args){
|
||
LocalDate localDate = LocalDate.parse("2019-11-15");
|
||
ZoneId zone = ZoneId.systemDefault();
|
||
Instant instant = localDate.atStartOfDay().atZone(zone).toInstant();
|
||
String s = getTimeAgo(Date.from(instant));
|
||
System.out.println(s);
|
||
}
|
||
|
||
public static Map getArticlesGlobalResult(PageInfo<ArticleDTO> pageInfo) {
|
||
Map map = new HashMap(2);
|
||
map.put("articles", pageInfo.getList());
|
||
Map pagination = new HashMap(4);
|
||
pagination.put("pageSize",pageInfo.getPageSize());
|
||
pagination.put("total",pageInfo.getTotal());
|
||
pagination.put("currentPage",pageInfo.getPageNum());
|
||
map.put("pagination", pagination);
|
||
return map;
|
||
}
|
||
|
||
public static Map getNotificationsGlobalResult(PageInfo<Notification> pageInfo) {
|
||
Map map = new HashMap(2);
|
||
map.put("notifications", pageInfo.getList());
|
||
Map pagination = new HashMap(4);
|
||
pagination.put("pageSize",pageInfo.getPageSize());
|
||
pagination.put("total",pageInfo.getTotal());
|
||
pagination.put("currentPage",pageInfo.getPageNum());
|
||
map.put("pagination", pagination);
|
||
return map;
|
||
}
|
||
|
||
public static String getIpAddress(HttpServletRequest request) {
|
||
String ip = request.getHeader("x-forwarded-for");
|
||
if (ip == null || ip.length() == 0 || UNKOWN.equalsIgnoreCase(ip)) {
|
||
ip = request.getHeader("Proxy-Client-IP");
|
||
}
|
||
if (ip == null || ip.length() == 0 || UNKOWN.equalsIgnoreCase(ip)) {
|
||
ip = request.getHeader("WL-Proxy-Client-IP");
|
||
}
|
||
if (ip == null || ip.length() == 0 || UNKOWN.equalsIgnoreCase(ip)) {
|
||
ip = request.getHeader("HTTP_CLIENT_IP");
|
||
}
|
||
if (ip == null || ip.length() == 0 || UNKOWN.equalsIgnoreCase(ip)) {
|
||
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
|
||
}
|
||
if (ip == null || ip.length() == 0 || UNKOWN.equalsIgnoreCase(ip)) {
|
||
ip = request.getRemoteAddr();
|
||
}
|
||
// 如果是多级代理,那么取第一个ip为客户端ip
|
||
if (ip != null && ip.indexOf(",") != -1) {
|
||
ip = ip.substring(0, ip.indexOf(",")).trim();
|
||
}
|
||
|
||
return ip;
|
||
}
|
||
|
||
public static Map getNotificationDTOsGlobalResult(PageInfo<NotificationDTO> pageInfo) {
|
||
Map map = new HashMap(2);
|
||
map.put("notifications", pageInfo.getList());
|
||
Map pagination = new HashMap(4);
|
||
pagination.put("pageSize",pageInfo.getPageSize());
|
||
pagination.put("total",pageInfo.getTotal());
|
||
pagination.put("currentPage",pageInfo.getPageNum());
|
||
map.put("pagination", pagination);
|
||
return map;
|
||
}
|
||
}
|