203 lines
11 KiB
Java
203 lines
11 KiB
Java
package egovframework.com.cmm.config;
|
|
|
|
import javax.servlet.FilterRegistration;
|
|
import javax.servlet.ServletContext;
|
|
import javax.servlet.ServletException;
|
|
import javax.servlet.ServletRegistration;
|
|
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.web.WebApplicationInitializer;
|
|
import org.springframework.web.context.ContextLoaderListener;
|
|
import org.springframework.web.context.support.XmlWebApplicationContext;
|
|
import org.springframework.web.filter.DelegatingFilterProxy;
|
|
import org.springframework.web.filter.HiddenHttpMethodFilter;
|
|
import org.springframework.web.multipart.support.MultipartFilter;
|
|
import org.springframework.web.servlet.DispatcherServlet;
|
|
|
|
import egovframework.com.cmm.filter.HTMLTagFilter;
|
|
import egovframework.com.cmm.filter.SessionTimeoutCookieFilter;
|
|
import egovframework.com.cmm.service.EgovProperties;
|
|
import egovframework.com.sec.security.filter.EgovSpringSecurityLoginFilter;
|
|
import egovframework.com.sec.security.filter.EgovSpringSecurityLogoutFilter;
|
|
import egovframework.com.uat.uap.filter.EgovLoginPolicyFilter;
|
|
import egovframework.com.utl.wed.filter.CkFilter;
|
|
|
|
|
|
/**
|
|
* EgovWebApplicationInitializer 클래스
|
|
* <Notice>
|
|
* 사용자 인증 권한처리를 분리(session, spring security) 하기 위해서 web.xml의 기능을
|
|
* Servlet3.x WebApplicationInitializer 기능으로 처리
|
|
* <Disclaimer>
|
|
* N/A
|
|
*
|
|
* @author 장동한
|
|
* @since 2016.06.23
|
|
* @version 1.0
|
|
* @see
|
|
*
|
|
* <pre>
|
|
* << 개정이력(Modification Information) >>
|
|
*
|
|
* 수정일 수정자 수정내용
|
|
* ------- ------------- ----------------------
|
|
* 2016.06.23 장동한 최초 생성
|
|
* 2018.10.02 신용호 Facebook 관련 HiddenHttpMethodFilter 추가
|
|
* 2018.10.26 신용호 EgovLoginPolicyFilter 추가 (IP접근처리)
|
|
* 2018.12.03 신용호 springMultipartFilter,HTMLTagFilter 추가 (XSS방지처리)
|
|
* </pre>
|
|
*/
|
|
|
|
|
|
public class EgovWebApplicationInitializer implements WebApplicationInitializer {
|
|
|
|
private static final Logger LOGGER = LoggerFactory.getLogger(EgovWebApplicationInitializer.class);
|
|
@Override
|
|
public void onStartup(ServletContext servletContext) throws ServletException {
|
|
LOGGER.debug("EgovWebApplicationInitializer START-============================================");
|
|
|
|
//-------------------------------------------------------------
|
|
// Egov Web ServletContextListener 설정
|
|
//-------------------------------------------------------------
|
|
servletContext.addListener(new egovframework.com.cmm.context.EgovWebServletContextListener());
|
|
|
|
//-------------------------------------------------------------
|
|
// Spring CharacterEncodingFilter 설정
|
|
//-------------------------------------------------------------
|
|
FilterRegistration.Dynamic characterEncoding = servletContext.addFilter("encodingFilter", new org.springframework.web.filter.CharacterEncodingFilter());
|
|
characterEncoding.setInitParameter("encoding", "UTF-8");
|
|
characterEncoding.setInitParameter("forceEncoding", "true");
|
|
characterEncoding.addMappingForUrlPatterns(null, false, "*.do");
|
|
//characterEncoding.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "*.do");
|
|
|
|
//-------------------------------------------------------------
|
|
// Spring ServletContextListener 설정
|
|
//-------------------------------------------------------------
|
|
XmlWebApplicationContext rootContext = new XmlWebApplicationContext();
|
|
rootContext.setConfigLocations(new String[] { "classpath*:egovframework/spring/com/**/context-*.xml" });
|
|
//rootContext.setConfigLocations(new String[] { "classpath*:egovframework/spring/com/context-*.xml","classpath*:egovframework/spring/com/*/context-*.xml" });
|
|
rootContext.refresh();
|
|
rootContext.start();
|
|
|
|
servletContext.addListener(new ContextLoaderListener(rootContext));
|
|
|
|
//-------------------------------------------------------------
|
|
// Spring ServletContextListener 설정
|
|
//-------------------------------------------------------------
|
|
XmlWebApplicationContext xmlWebApplicationContext = new XmlWebApplicationContext();
|
|
xmlWebApplicationContext.setConfigLocation("/WEB-INF/config/egovframework/springmvc/egov-com-*.xml");
|
|
ServletRegistration.Dynamic dispatcher = servletContext.addServlet("dispatcher", new DispatcherServlet(xmlWebApplicationContext));
|
|
//dispatcher.addMapping("*.do");
|
|
dispatcher.addMapping("/"); // Facebook OAuth 사용시 변경
|
|
dispatcher.setLoadOnStartup(1);
|
|
|
|
/*
|
|
* if("security".equals(EgovProperties.getProperty("Globals.Auth").trim())) {
|
|
*
|
|
* //------------------------------------------------------------- //
|
|
* springSecurityFilterChain 설정
|
|
* //-------------------------------------------------------------
|
|
* FilterRegistration.Dynamic springSecurityFilterChain =
|
|
* servletContext.addFilter("springSecurityFilterChain", new
|
|
* DelegatingFilterProxy());
|
|
* springSecurityFilterChain.addMappingForUrlPatterns(null, false, "*");
|
|
* //servletContext.addFilter("springSecurityFilterChain", new
|
|
* DelegatingFilterProxy("springSecurityFilterChain")).addMappingForUrlPatterns(
|
|
* null, false, "/*");
|
|
*
|
|
* //------------------------------------------------------------- //
|
|
* HttpSessionEventPublisher 설정
|
|
* //-------------------------------------------------------------
|
|
* servletContext.addListener(new
|
|
* org.springframework.security.web.session.HttpSessionEventPublisher());
|
|
*
|
|
* //------------------------------------------------------------- //
|
|
* EgovSpringSecurityLoginFilter 설정
|
|
* //-------------------------------------------------------------
|
|
* FilterRegistration.Dynamic egovSpringSecurityLoginFilter =
|
|
* servletContext.addFilter("egovSpringSecurityLoginFilter", new
|
|
* EgovSpringSecurityLoginFilter()); //로그인 실패시 반활 될 URL설정
|
|
* egovSpringSecurityLoginFilter.setInitParameter("loginURL",
|
|
* "/uat/uia/egovLoginUsr.do"); //로그인 처리 URL설정
|
|
* egovSpringSecurityLoginFilter.setInitParameter("loginProcessURL",
|
|
* "/uat/uia/actionLogin.do"); //처리 Url Pattern
|
|
* egovSpringSecurityLoginFilter.addMappingForUrlPatterns(null, false, "*.do");
|
|
*
|
|
* //------------------------------------------------------------- //
|
|
* EgovSpringSecurityLogoutFilter 설정
|
|
* //-------------------------------------------------------------
|
|
* FilterRegistration.Dynamic egovSpringSecurityLogoutFilter =
|
|
* servletContext.addFilter("egovSpringSecurityLogoutFilter", new
|
|
* EgovSpringSecurityLogoutFilter());
|
|
* egovSpringSecurityLogoutFilter.addMappingForUrlPatterns(null, false,
|
|
* "/uat/uia/actionLogout.do");
|
|
*
|
|
* } else
|
|
* if("session".equals(EgovProperties.getProperty("Globals.Auth").trim())) {
|
|
* //------------------------------------------------------------- //
|
|
* EgovLoginPolicyFilter 설정
|
|
* //-------------------------------------------------------------
|
|
* FilterRegistration.Dynamic egovLoginPolicyFilter =
|
|
* servletContext.addFilter("LoginPolicyFilter", new EgovLoginPolicyFilter());
|
|
* egovLoginPolicyFilter.addMappingForUrlPatterns(null, false,
|
|
* "/uat/uia/actionLogin.do");
|
|
*
|
|
* }
|
|
*/
|
|
|
|
//-------------------------------------------------------------
|
|
// 스프링 Security 필터 설정 추가 JWKIM
|
|
//-------------------------------------------------------------
|
|
FilterRegistration.Dynamic springSecurityFilterChain = servletContext.addFilter("springSecurityFilterChain", new org.springframework.web.filter.DelegatingFilterProxy());
|
|
springSecurityFilterChain.addMappingForUrlPatterns(null, false, "/*");
|
|
|
|
//-------------------------------------------------------------
|
|
// CkFilter 설정 (CKEditor 사용시 설정)
|
|
//-------------------------------------------------------------
|
|
FilterRegistration.Dynamic regCkFilter = servletContext.addFilter("CKFilter", new CkFilter());
|
|
regCkFilter.setInitParameter("properties", "egovframework/egovProps/ck.properties");
|
|
regCkFilter.addMappingForUrlPatterns(null, false, "/ckUploadImage");
|
|
|
|
//-------------------------------------------------------------
|
|
// HiddenHttpMethodFilter 설정 (Facebook OAuth 사용시 설정)
|
|
//-------------------------------------------------------------
|
|
FilterRegistration.Dynamic hiddenHttpMethodFilter = servletContext.addFilter("hiddenHttpMethodFilter", new HiddenHttpMethodFilter());
|
|
hiddenHttpMethodFilter.addMappingForUrlPatterns(null, false, "/*");
|
|
|
|
//-------------------------------------------------------------
|
|
// Tomcat의 경우 allowCasualMultipartParsing="true" 추가
|
|
// <Context docBase="" path="/" reloadable="true" allowCasualMultipartParsing="true">
|
|
//-------------------------------------------------------------
|
|
MultipartFilter springMultipartFilter = new MultipartFilter();
|
|
springMultipartFilter.setMultipartResolverBeanName("multipartResolver");
|
|
FilterRegistration.Dynamic multipartFilter = servletContext.addFilter("springMultipartFilter", springMultipartFilter);
|
|
multipartFilter.addMappingForUrlPatterns(null, false, "*.do");
|
|
|
|
//-------------------------------------------------------------
|
|
// HTMLTagFilter의 경우는 파라미터에 대하여 XSS 오류 방지를 위한 변환을 처리합니다.
|
|
//-------------------------------------------------------------
|
|
// HTMLTagFIlter의 경우는 JSP의 <c:out /> 등을 사용하지 못하는 특수한 상황에서 사용하시면 됩니다.
|
|
// (<c:out />의 경우 뷰단에서 데이터 출력시 XSS 방지 처리가 됨)
|
|
FilterRegistration.Dynamic htmlTagFilter = servletContext.addFilter("htmlTagFilter", new HTMLTagFilter());
|
|
htmlTagFilter.addMappingForUrlPatterns(null, false, "*.do");
|
|
|
|
//-------------------------------------------------------------
|
|
// SessionTimeoutCookieFilter는 쿠키에 타임아웃 시간을 기록한다.
|
|
//-------------------------------------------------------------
|
|
// latestServerTime - 서버 최근 시간
|
|
// expireSessionTime - 세션이 만료되는 시간
|
|
FilterRegistration.Dynamic sessionTimeoutFilter = servletContext.addFilter("sessionTimeoutFilter", new SessionTimeoutCookieFilter());
|
|
sessionTimeoutFilter.addMappingForUrlPatterns(null, false, "*.do");
|
|
|
|
//-------------------------------------------------------------
|
|
// Spring RequestContextListener 설정
|
|
//-------------------------------------------------------------
|
|
servletContext.addListener(new org.springframework.web.context.request.RequestContextListener());
|
|
|
|
LOGGER.debug("EgovWebApplicationInitializer END-============================================");
|
|
|
|
}
|
|
|
|
}
|