[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
댓글을 사용할 수 없습니다.