You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
442 lines
13 KiB
442 lines
13 KiB
/********************************************************************************************************* |
|
* 프로그램명 : Moumi.java 프로그램설명 : 프로젝트와 관련된 정보를 얻을수 있는 class 작성자 : (주)기현테크 작성일 : 2003.12.18 변경일 : 2003.11.30 |
|
**********************************************************************************************************/ |
|
|
|
package kr.co.kihyun.moumi; |
|
|
|
import java.io.File; |
|
import java.io.IOException; |
|
import java.io.InputStream; |
|
import java.io.ObjectInputStream; |
|
import java.sql.Connection; |
|
import java.sql.ResultSet; |
|
import java.sql.Statement; |
|
import java.util.Enumeration; |
|
import java.util.List; |
|
import java.util.Map; |
|
import java.util.Properties; |
|
import java.util.ResourceBundle; |
|
|
|
import javax.jdo.JDOHelper; |
|
import javax.jdo.PersistenceManagerFactory; |
|
import javax.servlet.Filter; |
|
import javax.servlet.FilterChain; |
|
import javax.servlet.FilterConfig; |
|
import javax.servlet.ServletException; |
|
import javax.servlet.ServletRequest; |
|
import javax.servlet.ServletResponse; |
|
import javax.servlet.http.HttpServletRequest; |
|
import javax.servlet.http.HttpServletResponse; |
|
|
|
import kr.co.kihyun.beans.entity.util.ECrossSchemaOrganizer; |
|
|
|
import kr.co.kihyun.beans.entity.util.PMF; |
|
import kr.co.kihyun.beans.entity.util.SchemaOrganizer; |
|
import kr.co.kihyun.db.DBPool; |
|
import kr.co.kihyun.sync.OrgSynchronizer; |
|
|
|
import org.slf4j.Logger; |
|
import org.slf4j.LoggerFactory; |
|
|
|
public final class Moumi implements Filter { |
|
/** |
|
* |
|
*/ |
|
private static final long serialVersionUID = 1L; |
|
private static final Logger LOG = LoggerFactory.getLogger(Moumi.class); |
|
private OrgSynchronizer sync; |
|
|
|
/** |
|
* @deprecated Use {@link MoumiConfig#getMessageBundle()} instead |
|
*/ |
|
public static final ResourceBundle getMessageBundle() { |
|
return MoumiConfig.getMessageBundle(); |
|
} |
|
|
|
public Moumi() { |
|
} |
|
|
|
//v2. 5.static final 필드 변조 가능성 : Update by KWON,HAN |
|
// public이라서 이미 다른 자바함수에서 이미 사용하고 있으므로 웹취약점의 해결책을 적용하지 아니함. |
|
/******** 집계문서 접근권한 상수값 |
|
* @deprecated Use {@link MoumiConfig#PER} instead********/ |
|
@Deprecated |
|
public static final int PER = MoumiConfig.PER; |
|
/** |
|
* @deprecated Use {@link MoumiConfig#DEPT} instead |
|
*/ |
|
@Deprecated |
|
public static final int DEPT = MoumiConfig.DEPT; |
|
/** |
|
* @deprecated Use {@link MoumiConfig#PART} instead |
|
*/ |
|
@Deprecated |
|
public static final int PART = MoumiConfig.PART; |
|
/** |
|
* @deprecated Use {@link MoumiConfig#ALL} instead |
|
*/ |
|
@Deprecated |
|
public static final int ALL = MoumiConfig.ALL; |
|
|
|
/******** 사용자 권한 상수 정의 |
|
* @deprecated Use {@link MoumiConfig#REPOPER} instead*********/ |
|
@Deprecated |
|
public static final int REPOPER = MoumiConfig.REPOPER; // 보고자 |
|
/** |
|
* @deprecated Use {@link MoumiConfig#SUB_TOTPER} instead |
|
*/ |
|
@Deprecated |
|
public static final int SUB_TOTPER = MoumiConfig.SUB_TOTPER; // 집계자 |
|
/** |
|
* @deprecated Use {@link MoumiConfig#TOTPER} instead |
|
*/ |
|
@Deprecated |
|
public static final int TOTPER = MoumiConfig.TOTPER; // 상위집계자 |
|
/** |
|
* @deprecated Use {@link MoumiConfig#PART_REPOADM} instead |
|
*/ |
|
@Deprecated |
|
public static final int PART_REPOADM = MoumiConfig.PART_REPOADM; // 기관보고관리자 |
|
/** |
|
* @deprecated Use {@link MoumiConfig#REPOADM} instead |
|
*/ |
|
@Deprecated |
|
public static final int REPOADM = MoumiConfig.REPOADM; // 보고관리자 |
|
/** |
|
* @deprecated Use {@link MoumiConfig#SUB_TOTADM} instead |
|
*/ |
|
@Deprecated |
|
public static final int SUB_TOTADM = MoumiConfig.SUB_TOTADM; // 기관집계관리자 |
|
/** |
|
* @deprecated Use {@link MoumiConfig#SUB_SYSADM} instead |
|
*/ |
|
@Deprecated |
|
public static final int SUB_SYSADM = MoumiConfig.SUB_SYSADM; // 기관시스템관리자 |
|
/** |
|
* @deprecated Use {@link MoumiConfig#TOTADM} instead |
|
*/ |
|
@Deprecated |
|
public static final int TOTADM = MoumiConfig.TOTADM; // 집계관리자 |
|
/** |
|
* @deprecated Use {@link MoumiConfig#SYSADM} instead |
|
*/ |
|
@Deprecated |
|
public static final int SYSADM = MoumiConfig.SYSADM; // 시스템관리자 |
|
//========================================================== |
|
|
|
|
|
//v2. 5.static final 필드 변조 가능성 : Update by KWON,HAN |
|
//private는 같은 클래스 내에서만 호출이 가능하므로 접근제한이 없는 public으로 하고 final을 사용하지 않는다 |
|
//따라서 public static final 을 public static 으로 변경한다. |
|
/** |
|
* @deprecated Use {@link MoumiConfig#getInitParameter(String)} instead |
|
*/ |
|
public static String getInitParameter(String paramName) { |
|
return MoumiConfig.getInitParameter(paramName); |
|
} |
|
|
|
/******** Setup values |
|
* @deprecated Use {@link MoumiConfig#getRoot()} instead********/ |
|
public static File getRoot() { |
|
return MoumiConfig.getRoot(); |
|
} |
|
|
|
/** |
|
* @deprecated Use {@link MoumiConfig#getDir(String)} instead |
|
*/ |
|
private static File getDir(String fileDir) { |
|
return MoumiConfig.getDir(fileDir); |
|
} |
|
|
|
/** |
|
* @deprecated Use {@link MoumiConfig#getFileDirectory()} instead |
|
*/ |
|
public static File getFileDirectory() { |
|
return MoumiConfig.getFileDirectory(); |
|
} |
|
|
|
/** |
|
* @deprecated Use {@link MoumiConfig#getTotRoot()} instead |
|
*/ |
|
public static File getTotRoot() { |
|
return MoumiConfig.getTotRoot(); |
|
} |
|
|
|
/** |
|
* @deprecated Use {@link MoumiConfig#getTotPerRoot()} instead |
|
*/ |
|
public static File getTotPerRoot() { |
|
return MoumiConfig.getTotPerRoot(); |
|
} |
|
|
|
/** |
|
* @deprecated Use {@link MoumiConfig#getTotPerTmp()} instead |
|
*/ |
|
public static File getTotPerTmp() { |
|
return MoumiConfig.getTotPerTmp(); |
|
} |
|
|
|
/** |
|
* @deprecated Use {@link MoumiConfig#getRepoPerRoot()} instead |
|
*/ |
|
public static File getRepoPerRoot() { |
|
return MoumiConfig.getRepoPerRoot(); |
|
} |
|
|
|
/** |
|
* @deprecated Use {@link MoumiConfig#getRepoPerTmp()} instead |
|
*/ |
|
public static File getRepoPerTmp() { |
|
return MoumiConfig.getRepoPerTmp(); |
|
} |
|
|
|
/** |
|
* @deprecated Use {@link MoumiConfig#getBoardFileRoot()} instead |
|
*/ |
|
public static File getBoardFileRoot() { |
|
return MoumiConfig.getBoardFileRoot(); |
|
} |
|
|
|
/** |
|
* @deprecated Use {@link MoumiConfig#getDocFileRoot()} instead |
|
*/ |
|
public static File getDocFileRoot() { |
|
return MoumiConfig.getDocFileRoot(); |
|
} |
|
|
|
/** |
|
* @deprecated Use {@link MoumiConfig#getCsvFileRoot()} instead |
|
*/ |
|
public static File getCsvFileRoot() { |
|
return MoumiConfig.getCsvFileRoot(); |
|
} |
|
|
|
/** |
|
* @deprecated Use {@link MoumiConfig#getSysAdmFileRoot()} instead |
|
*/ |
|
public static File getSysAdmFileRoot() { |
|
return MoumiConfig.getSysAdmFileRoot(); |
|
} |
|
|
|
/** |
|
* @deprecated Use {@link MoumiConfig#getTitle()} instead |
|
*/ |
|
public static String getTitle() { |
|
return MoumiConfig.getTitle(); |
|
} |
|
|
|
/** |
|
* @deprecated Use {@link MoumiConfig#getSysAdmIP()} instead |
|
*/ |
|
public static String getSysAdmIP() { |
|
return MoumiConfig.getSysAdmIP(); |
|
} |
|
|
|
/** |
|
* @deprecated Use {@link MoumiConfig#getUseRecog()} instead |
|
*/ |
|
public static boolean getUseRecog() { |
|
return MoumiConfig.getUseRecog(); |
|
} |
|
|
|
/** |
|
* @deprecated Use {@link MoumiConfig#getUsePasswdEncrypt()} instead |
|
*/ |
|
public static boolean getUsePasswdEncrypt() { |
|
return MoumiConfig.getUsePasswdEncrypt(); |
|
} |
|
|
|
/** |
|
* @deprecated Use {@link MoumiConfig#isSysAdmLoginConstraint()} instead |
|
*/ |
|
public static boolean isSysAdmLoginConstraint() { |
|
return MoumiConfig.isSysAdmLoginConstraint(); |
|
} |
|
|
|
/** |
|
* @deprecated Use {@link MoumiConfig#getUseAssign()} instead |
|
*/ |
|
public static boolean getUseAssign() { |
|
return MoumiConfig.getUseAssign(); |
|
} |
|
|
|
/** |
|
* @deprecated Use {@link MoumiConfig#is2Step()} instead |
|
*/ |
|
public static boolean is2Step() { |
|
return MoumiConfig.is2Step(); |
|
} |
|
|
|
/** |
|
* @deprecated Use {@link MoumiConfig#isMonitor()} instead |
|
*/ |
|
public static boolean isMonitor() { |
|
return MoumiConfig.isMonitor(); |
|
} |
|
|
|
/** |
|
* @deprecated Use {@link MoumiConfig#is2StepDirect()} instead |
|
*/ |
|
public static boolean is2StepDirect() { |
|
return MoumiConfig.is2StepDirect(); |
|
} |
|
|
|
/** |
|
* @deprecated Use {@link MoumiConfig#getDtdUri()} instead |
|
*/ |
|
public static String getDtdUri() { |
|
return MoumiConfig.getDtdUri(); |
|
} |
|
|
|
/** |
|
* @deprecated Use {@link MoumiConfig#getMessengerServerAddress()} instead |
|
*/ |
|
public static String getMessengerServerAddress() { |
|
return MoumiConfig.getMessengerServerAddress(); |
|
} |
|
|
|
/** |
|
* @deprecated Use {@link MoumiConfig#getMessengerServerPort()} instead |
|
*/ |
|
public static int getMessengerServerPort() { |
|
return MoumiConfig.getMessengerServerPort(); |
|
} |
|
|
|
/** |
|
* @deprecated Use {@link MoumiConfig#getPMFProperties()} instead |
|
*/ |
|
public static Properties getPMFProperties() { |
|
return MoumiConfig.getPMFProperties(); |
|
} |
|
//========================================================== |
|
|
|
public void destroy() { |
|
LOG.info("Moumi has been destroyed."); |
|
} |
|
|
|
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, |
|
ServletException { |
|
// if(arg0.getRemoteHost().equals("127.0.0.1")){ |
|
// arg0.setCharacterEncoding("8859_1"); |
|
// } |
|
arg2.doFilter(arg0, arg1); |
|
HttpServletRequest req = (HttpServletRequest) arg0; |
|
//팝업을 레이어로 바꿀시 스크립트 에러 해결 |
|
//if(req.getRequestURI().contains(".jsp")){ |
|
//HttpServletResponse res=(HttpServletResponse)arg1; |
|
//res.setCharacterEncoding("UTF-8"); |
|
//arg1.getWriter().append("<script>if(!opener)opener=parent;</script>"); |
|
//} |
|
// HttpServletRequest req = (HttpServletRequest) arg0; |
|
// if (req.getMethod().equalsIgnoreCase("POST") |
|
// && req.getContentType().startsWith("multipart/form-data")) { |
|
// LOG.debug("MULTIPART REQUEST"); |
|
// arg2.doFilter(new MultipartRequest(req), arg1); |
|
// } else { |
|
// arg2.doFilter(arg0, arg1); |
|
// } |
|
} |
|
|
|
|
|
/*public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, |
|
ServletException { |
|
|
|
try { |
|
arg2.doFilter(arg0, arg1); |
|
LOG.debug("arg0 {}",arg0); |
|
LOG.debug("arg1 {}",arg1); |
|
LOG.debug("arg2 {}",arg2); |
|
return; |
|
} catch (Exception e) { |
|
LOG.error("arg0 {}",arg0); |
|
LOG.error("arg1 {}",arg1); |
|
LOG.error("arg2 {}",arg2); |
|
LOG.error(e.toString()); |
|
} |
|
}*/ |
|
|
|
|
|
public void init(FilterConfig arg0) throws ServletException { |
|
|
|
/*LOG.info("팝업파일리스트 초기화시작"); |
|
String hasFile=""; |
|
try { |
|
String sql="SELECT ID,ATTACHMENTS FROM MOUMI_BOARD" |
|
+" WHERE GROUP_ID='ID_SYSTEM_NOTICE' AND POPUP_YN='Y' and ATTACHMENTS is not null with ur"; |
|
DBPool pool=new DBPool(); |
|
Connection con= pool.getConnection(); |
|
Statement stmt= con.createStatement(); |
|
ResultSet rs= stmt.executeQuery(sql); |
|
while (rs.next()) { |
|
InputStream is=rs.getBinaryStream(2); |
|
ObjectInputStream ois=new ObjectInputStream(is); |
|
Map<String, List<Byte>> map= (Map<String, List<Byte>>)ois.readObject(); |
|
LOG.info("팝업파일 "+rs.getString(1)); |
|
if(map.size()>0){ |
|
hasFile+=rs.getString(1)+";"; |
|
} |
|
ois.close(); |
|
is.close(); |
|
|
|
} |
|
arg0.getServletContext().setAttribute("hasFile", hasFile); |
|
rs.close(); |
|
stmt.close(); |
|
con.close(); |
|
} catch (Exception e) { |
|
e.printStackTrace(); |
|
} |
|
LOG.info("팝업파일리스트 초기화 끝");*/ |
|
|
|
SchemaOrganizer so = new SchemaOrganizer(PMF.get()); |
|
so.validateSchema(); |
|
// so.validateUsers(); |
|
so.validateCategories(); |
|
|
|
PersistenceManagerFactory ecrossPmf = JDOHelper.getPersistenceManagerFactory(MoumiConfig.getECrossProperties()); |
|
PMF.set("ECROSS", ecrossPmf); |
|
ECrossSchemaOrganizer eso = new ECrossSchemaOrganizer(PMF.get("ECROSS")); |
|
eso.validateSchema(); |
|
|
|
//moumi.properties 파일내에 moumi.use.replication = false |
|
if (Boolean.parseBoolean(MoumiConfig.getInitParameter("moumi.use.replication"))) { |
|
PersistenceManagerFactory handyPmf = JDOHelper.getPersistenceManagerFactory(MoumiConfig.getHandyProperties()); |
|
PMF.set("HANDY", handyPmf); |
|
sync = new OrgSynchronizer(); |
|
sync.start(); |
|
} |
|
|
|
//20.검사시점과 사용시점(멀티쓰레드)_CWE-367 : Test by KWON,HAN |
|
//sync = new OrgSynchronizer(); |
|
//sync.run(); |
|
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
|
|
|
LOG.info("Moumi has been initialized."); |
|
StringBuilder configs = new StringBuilder(); |
|
for (Enumeration<String> keys = MoumiConfig.getMoumiConfig().getKeys(); keys.hasMoreElements();) { |
|
String key = keys.nextElement(); |
|
configs.append(" ").append(key).append(" : ").append(MoumiConfig.getMoumiConfig().getString(key)).append("\n"); |
|
} |
|
LOG.info("Moumi installed on : {}", MoumiConfig.getRoot()); |
|
LOG.info("Moumi configurations are : \n{}", configs.toString()); |
|
|
|
if(arg0.getServletContext().getServerInfo().contains("jetty")){ |
|
try { |
|
Runtime.getRuntime().exec("C:\\Windows\\System32\\taskkill.exe /f /im iexplore.exe"); |
|
new Thread(){ |
|
public void run() { |
|
try { |
|
Thread.sleep(1000); |
|
Runtime.getRuntime().exec("C:\\Program Files\\Internet Explorer\\iexplore.exe http://localhost"); |
|
} catch (Exception e) { |
|
// TODO: handle exception |
|
} |
|
} |
|
}.start(); |
|
} catch (IOException e) { |
|
// TODO Auto-generated catch block |
|
e.printStackTrace(); |
|
} |
|
} |
|
} |
|
}
|
|
|