
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
package froala.editor.utils;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Date;
import java.util.Enumeration;
import java.util.Map;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import egovframework.com.cmm.service.EgovProperties;
import froala.editor.file.FileOptions;
import froala.editor.image.ImageOptions;
public class CommonUtil {
private static Logger logger = LoggerFactory.getLogger(CommonUtil.class);
/**
* 배열을 문자열로 바꿈
*
* @param glue 구분자
* @param array 배열
* @return
*/
public static String arrayJoin(String glue, String array[]) {
String result = "";
for (int i = 0; i < array.length; i++) {
result += array[i];
if (i < array.length - 1)
result += glue;
}
return result;
}
/**
* 파라메터 확인용
*
* @param request
*/
public static void viewRequestParams(HttpServletRequest request) {
Enumeration<String> e = request.getParameterNames();
String name = "";
while (e.hasMoreElements()) {
name = e.nextElement();
logger.info("{} : {}", name, request.getParameter(name));
}
}
/**
* 시간유틸
*
* @author simplys
*
*/
private static class TIME_MAXIMUM {
public static final int SEC = 60;
public static final int MIN = 60;
public static final int HOUR = 24;
public static final int DAY = 30;
public static final int MONTH = 12;
}
public static String formatTimeString(Date tempDate) {
if (tempDate != null) {
long curTime = System.currentTimeMillis();
long regTime = tempDate.getTime();
long diffTime = (curTime - regTime) / 1000;
String msg = null;
if (diffTime < TIME_MAXIMUM.SEC) {
// sec
msg = "방금 전";
} else if ((diffTime /= TIME_MAXIMUM.SEC) < TIME_MAXIMUM.MIN) {
// min
msg = diffTime + "분 전";
} else if ((diffTime /= TIME_MAXIMUM.MIN) < TIME_MAXIMUM.HOUR) {
// hour
msg = (diffTime) + "시간 전";
} else if ((diffTime /= TIME_MAXIMUM.HOUR) < TIME_MAXIMUM.DAY) {
// day
msg = (diffTime) + "일 전";
} else if ((diffTime /= TIME_MAXIMUM.DAY) < TIME_MAXIMUM.MONTH) {
// day
msg = (diffTime) + "달 전";
} else {
msg = (diffTime) + "년 전";
}
return msg;
} else {
return null;
}
}
private static String makeLink(String url, Integer p, Map<String, Object> param) {
StringBuffer ret = new StringBuffer();
if (url.startsWith("/")) {
ret.append(url + "?page=" + p);
if (param != null)
for (String key : param.keySet())
ret.append("&" + key + "=" + (param.get(key) == null ? "" : param.get(key)));
} else {
ret.append(String.format("javascript:%s(%d", url, p));
if (param != null)
for (String key : param.keySet())
if (param.get(key) instanceof Integer)
ret.append(", " + param.get(key));
else
ret.append(", '" + param.get(key) + "'");
ret.append(")");
}
return ret.toString();
}
/**
* 페이징 생성
*
* @param page 페이지 번호
* @param limit 한 페이지에 보여줄 목록 수
* @param pagelimit 한 줄에 보여줄 페이지 갯수
* @param allRowCount 전체 검색 레코드 갯수
* @param url 한 페이지에 걸릴 url 링크
* @param param URL 뒤에 queryString
* @return
*/
public static String pagePopupList(Integer page, Integer limit, Integer pagelimit, Integer allRowCount, String url,
Map<String, Object> param) {
StringBuffer sb = new StringBuffer();
Integer lastpage = (int) Math.ceil((allRowCount * 1.0) / (limit * 1.0));
sb.append(" <div class='aC'>");
sb.append(" <div class='pagination'>");
sb.append(" <ul>");
if ((page - 1) / pagelimit * pagelimit + 1 > pagelimit) {
// sb.append(" <li><a href='"+makeLink(url, 1, param)+"'>시작</a></li>");
} else {
// sb.append(" <li><a href='#'>시작</a></li>");
}
if ((page - 1) / pagelimit * pagelimit + 1 > pagelimit) {
sb.append(" <li><a href='" + makeLink(url, ((page - 1) / pagelimit * pagelimit), param)
+ "'>이전</a></li>");
} else {
sb.append(" <li><a href='#'>이전</a></li>");
}
if (lastpage == 0) {
sb.append(" <li class='active'><span>1</span></li> \n");
}
for (int i = (page - 1) / pagelimit * pagelimit + 1, j = 0; i <= lastpage && j < pagelimit; i++, j++) {
if (i == page) {
sb.append(" <li class='active'><span>" + i + "</span></li> \n");
} else {
sb.append(" <li><a href=\"").append(makeLink(url, i, param)).append("\">").append(i)
.append("</a></li> \n");
}
}
if ((int) ((page - 1) / pagelimit) < (int) (allRowCount / limit) / pagelimit) {
sb.append(" <li class='next'><a href='"
+ makeLink(url, (((page - 1) / pagelimit + 1) * pagelimit + 1), param) + "'>다음</a></li> \n");
} else {
sb.append(" <li class='next'><a href='#'>다음</a></li> \n");
}
if (page < (int) Math.ceil((lastpage * 1.0) / (pagelimit * 1.0)) * pagelimit - (pagelimit - 1)) {
// sb.append(" <li><a href='"+makeLink(url, lastpage, param)+"'>끝</a></li> \n");
} else {
// sb.append(" <li><a href='#'>끝</a></li> \n");
}
sb.append(" </ul> \n").append(" </div> \n").append(" </div> \n");
return sb.toString();
}
/**
* 페이징 생성
*
* @param page 페이지 번호
* @param limit 한 페이지에 보여줄 목록 수
* @param pagelimit 한 줄에 보여줄 페이지 갯수
* @param allRowCount 전체 검색 레코드 갯수
* @param url 한 페이지에 걸릴 url 링크
* @param param URL 뒤에 queryString
* @return
*/
public static String pageList(Integer page, Integer limit, Integer pagelimit, Integer allRowCount, String url,
Map<String, Object> param) {
StringBuffer sb = new StringBuffer();
Integer lastpage = (int) Math.ceil((allRowCount * 1.0) / (limit * 1.0));
sb.append(" <div class='pagination pagination-large pagination-centered'>");
sb.append(" <ul>");
if ((page - 1) / pagelimit * pagelimit + 1 > pagelimit) {
// sb.append(" <li><a href='"+makeLink(url, 1, param)+"'>시작</a></li>");
} else {
// sb.append(" <li><a href='#'>시작</a></li>");
}
if ((page - 1) / pagelimit * pagelimit + 1 > pagelimit) {
sb.append(" <li><a href='" + makeLink(url, ((page - 1) / pagelimit * pagelimit), param)
+ "'>이전</a></li>");
} else {
sb.append(" <li><a href='#'>이전</a></li>");
}
if (lastpage == 0) {
sb.append(" <li class='active'><a href='#'>1</a></li> \n");
}
for (int i = (page - 1) / pagelimit * pagelimit + 1, j = 0; i <= lastpage && j < pagelimit; i++, j++) {
if (i == page) {
sb.append(" <li class='active'><a href='#'>" + i + "</a></li> \n");
} else {
sb.append(" <li><a href=\"").append(makeLink(url, i, param)).append("\">").append(i)
.append("</a></li> \n");
}
}
if ((int) ((page - 1) / pagelimit) < (int) (allRowCount / limit) / pagelimit) {
sb.append(" <li class='next'><a href='"
+ makeLink(url, (((page - 1) / pagelimit + 1) * pagelimit + 1), param) + "'>다음</a></li> \n");
} else {
sb.append(" <li class='next'><a href='#'>다음</a></li> \n");
}
if (page < (int) Math.ceil((lastpage * 1.0) / (pagelimit * 1.0)) * pagelimit - (pagelimit - 1)) {
// sb.append(" <li><a href='"+makeLink(url, lastpage, param)+"'>끝</a></li> \n");
} else {
// sb.append(" <li><a href='#'>끝</a></li> \n");
}
sb.append(" </ul> \n").append(" </div> \n");
return sb.toString();
}
public static String getURL(HttpServletRequest request) {
Enumeration<?> param = request.getParameterNames();
StringBuffer strParam = new StringBuffer();
StringBuffer strURL = new StringBuffer();
if (param.hasMoreElements()) {
strParam.append("?");
}
while (param.hasMoreElements()) {
String name = (String) param.nextElement();
String value = request.getParameter(name);
strParam.append(name + "=" + value);
if (param.hasMoreElements()) {
strParam.append("&");
}
}
strURL.append(request.getRequestURI());
strURL.append(strParam);
return strURL.toString();
}
public static Boolean setTimeout(int delayTime) {
long now = System.currentTimeMillis();
long currentTime = 0;
while (currentTime - now < delayTime) {
currentTime = System.currentTimeMillis();
}
return true;
}
public static String arrayToString(String[] str, String argDelimiter) {
String rString = "";
if (str == null)
return "";
int cntArray = str.length;
for (int i = 0; i < cntArray; i++) {
if (i > 0 && i < cntArray)
rString += argDelimiter;
rString += str[i];
}
return rString;
}
public static String hashSHA256(String str) {
String SHA = "";
try {
MessageDigest sh = MessageDigest.getInstance("SHA-256");
sh.update(str.getBytes());
byte byteData[] = sh.digest();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < byteData.length; i++) {
sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
}
SHA = sb.toString();
} catch (NoSuchAlgorithmException e) {
logger.error("fail to process hashSHA256 {}", e);
SHA = null;
}
return SHA;
}
/**
* 에디터 내용 변경(contextpath)
*
* @Author : 임종호
* @Date : 2021. 11. 3.
* @Method Name : convertEditorCn
* @return : String
*/
public static String convertEditorCn(String cn, HttpServletRequest request) {
String contextPath = request.getContextPath();
String convertCn = cn
.replace("src=\"" + ImageOptions.downloadDefault, "src=\"" + contextPath + ImageOptions.downloadDefault)
.replace("src=\"/vtsp" + ImageOptions.downloadDefault,
"src=\"" + contextPath + ImageOptions.downloadDefault)
.replace("href=\"" + FileOptions.downloadDefault, "href=\"" + contextPath + FileOptions.downloadDefault)
.replace("href=\"/vtsp" + FileOptions.downloadDefault,
"href=\"" + contextPath + FileOptions.downloadDefault);
return convertCn;
}
/**
* 모바일 체크
*
* @Author : 임종호
* @Date : 2021. 11. 8.
* @Method Name : isMobile
* @return : boolean
*/
public static boolean isMobile(HttpServletRequest request) {
String userAgent = request.getHeader("user-agent");
boolean mobile1 = userAgent.matches(
".*(iPhone|iPod|Android|Windows CE|BlackBerry|Symbian|Windows Phone|webOS|Opera Mini|Opera Mobi|POLARIS|IEMobile|lgtelecom|nokia|SonyEricsson).*");
boolean mobile2 = userAgent.matches(".*(LG|SAMSUNG|Samsung).*");
if (mobile1 || mobile2) {
return true;
} else {
return false;
}
}
/**
* AES256 암호화 - URL 인코딩
* @Author : 임종호
* @Date : 2021. 11. 16.
* @Method Name : encryptAES256
* @return : String
*/
public static String encryptAES256(String str) {
if (StringUtils.isBlank(str)) {
return "";
}
String enStr = "";
String keyStr = EgovProperties.getProperty("ctm.egovfilescrty.key").trim();
String ivStr = EgovProperties.getProperty("ctm.egovfilescrty.iv").trim();
Key key = new SecretKeySpec(keyStr.getBytes(), "AES");
IvParameterSpec iv = new IvParameterSpec(ivStr.getBytes());
Cipher c;
try {
c = Cipher.getInstance("AES/CBC/PKCS5Padding");
c.init(Cipher.ENCRYPT_MODE, key, iv);
byte[] encrypted;
encrypted = c.doFinal(str.getBytes("UTF-8"));
enStr = new String(Base64.encodeBase64(encrypted));
enStr = URLEncoder.encode(enStr, "UTF-8");
} catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | UnsupportedEncodingException
| InvalidAlgorithmParameterException | IllegalBlockSizeException | BadPaddingException e) {
logger.error(e.getCause().getMessage());
return "";
}
return enStr;
}
/**
* AES256 복호화 - URL 인코딩
* @Author : 임종호
* @Date : 2021. 11. 16.
* @Method Name : decryptAES256
* @return : String
*/
public static String decryptAES256(String str) {
if (StringUtils.isBlank(str)) {
return "";
}
String deStr = "";
String keyStr = EgovProperties.getProperty("ctm.egovfilescrty.key").trim();
String ivStr = EgovProperties.getProperty("ctm.egovfilescrty.iv").trim();
Key key = new SecretKeySpec(keyStr.getBytes(), "AES");
IvParameterSpec iv = new IvParameterSpec(ivStr.getBytes());
Cipher c;
try {
c = Cipher.getInstance("AES/CBC/PKCS5Padding");
c.init(Cipher.DECRYPT_MODE, key, iv);
str = str.replace(" ", "+"); // 암호화된 데이터가 + 일때 공백으로 넘어와서 치환
byte[] decrypted = Base64.decodeBase64(str);
deStr = new String(c.doFinal(decrypted), "UTF-8");
} catch (NoSuchAlgorithmException | NoSuchPaddingException | InvalidKeyException | UnsupportedEncodingException
| InvalidAlgorithmParameterException | IllegalBlockSizeException | BadPaddingException e) {
logger.error(e.getCause().getMessage());
return "";
}
return deStr;
}
}