2020-08-04 21:03:10 +08:00

198 lines
6.8 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}