[Spring Framework] 전자정부 프레임워크 POST 발송시 한글깨짐 해결
전자정부 프레임워크로 개발을 진행하다
특정 상황에서 한글 깨짐이 발생했다.
Web.xml에 UTF-8필터가 없던 상태 찾아보니 전자정부 프레임워크는 서블릿 3.0 이상부터
Web.xml대신 EgovWebApplicationInitalizer.java로 대신하게 되어있다.
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, "*");
/*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");
}
//-------------------------------------------------------------
// CkFilter 설정 (CKEditor 사용시 설정)
//-------------------------------------------------------------
FilterRegistration.Dynamic regCkFilter = servletContext.addFilter("CKFilter", new CkFilter());
regCkFilter.setInitParameter("properties", "egovframework/egovProps/ck.properties");
regCkFilter.addMappingForUrlPatterns(null, false, "/ckupload");
//-------------------------------------------------------------
// 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");*/
//-------------------------------------------------------------
// Spring RequestContextListener 설정
//-------------------------------------------------------------
servletContext.addListener(new org.springframework.web.context.request.RequestContextListener());
LOGGER.debug("EgovWebApplicationInitializer END-============================================");
}
}
//-------------------------------------------------------------
// 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, "*");
/*characterEncoding.addMappingForUrlPatterns(null, false, "*.do");*/
//characterEncoding.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "*.do");
확인해보니 characterEncoding.addMappingForUrlPatterns(null, false, "*");
라는 구문이 characterEncoding.addMappingForUrlPatterns(null, false, "*.do");
로 기본 설정되어있다. 현재 진행하는 프로젝트는 *.do로 끝나지 않기 때문에
UTF-8 필터가 제대로 설정되지 않았던 것 *로 변경하여 접속되는 모든 URL에 UTF-8을 적용시켰다.
'Backend > Spring Framework' 카테고리의 다른 글
[Spring Framework] DI, IoC 그리고 의존성 주입(DI)의 3가지 방법 (0) | 2021.10.09 |
---|---|
[Spring Framework]전자정부 프레임워크 3.9.0 올인원 적용하기 (0) | 2021.03.13 |
[Spring Framework]Spring Framework에서 ehcache를 사용해보자! (0) | 2021.02.08 |
[Spring Framework]전자정부프레임워크 공통컴포넌트 DML입력시 대체 변수 해결하기 (0) | 2020.12.30 |
[Spring Framework]전자정부프레임워크(3.9.0) 설치 방법 (0) | 2020.12.26 |
댓글
이 글 공유하기
다른 글
-
[Spring Framework] DI, IoC 그리고 의존성 주입(DI)의 3가지 방법
[Spring Framework] DI, IoC 그리고 의존성 주입(DI)의 3가지 방법
2021.10.09 -
[Spring Framework]전자정부 프레임워크 3.9.0 올인원 적용하기
[Spring Framework]전자정부 프레임워크 3.9.0 올인원 적용하기
2021.03.13 -
[Spring Framework]Spring Framework에서 ehcache를 사용해보자!
[Spring Framework]Spring Framework에서 ehcache를 사용해보자!
2021.02.08 -
[Spring Framework]전자정부프레임워크 공통컴포넌트 DML입력시 대체 변수 해결하기
[Spring Framework]전자정부프레임워크 공통컴포넌트 DML입력시 대체 변수 해결하기
2020.12.30