-
[Spring Framework] 한글 인코딩이 깨질때 (Spring Security 사용시)백엔드/Spring 2020. 12. 2. 23:20
스프링에서 한글 인코딩
주로 폼의 데이터 전송 기법으로는 Get과 Post가 있다.
Get의 경우 Tomcat의 server.xml를 수정해주면 되는 것이고
Post의 경우 web.xml를 수정해주면 되는 것인데
어떠한 이유에서인지, web.xml에서 설정한 필터링이
직접 디코딩, 인코딩, 이클립스 소스파일 인코딩 문제 등등...
-> 난리를 쳐도 한글이 정상적으로 출력되지 않는 것이다.
분명 비슷한 경험의 개발자들이 많을 것이고
스스로도 기억하고자 남기는 글..
Encoding For Get
Tomcat의 server.xml에서 다음을 수정해준다.
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />cs 이 부분에 URIEncoding를 추가시켜주어, 아래와 같이 만들어준다.
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>cs 사실 이 부분은 딱히 손 볼게 없다.
Encoding For Post
문제의 녀석이다.
web.xml에 아래와 같이 추가를 했지만,
어떤 난리를 벌여도, 한글이 출력되지 않았다.
<!-- encoding filter --><filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter>cs 그러다가 문뜩 떠오른
Spring Security
인코딩을 먼저 해주고 스프링 시큐리티 체인 필터를 거쳐야 하는 것이 아닌 가?
생각이 들었다.
(CSRF 토큰을 처리할때, Encoding Filter를 먼저 거치지 않고 SecurityFilterChain에서 데이터 전송을 끝낸게 아닐까?)
그래서 Encoding Filter를 SecurityFilterChain보다 앞에 두어 보았다.
<!-- encoding Filter --><filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!-- Spring Security Filter Chain --><filter><filter-name>springSecurityFilterChain</filter-name><filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class></filter><filter-mapping><filter-name>springSecurityFilterChain</filter-name><url-pattern>/*</url-pattern></filter-mapping>cs :: 결과는 성공적이였고, 6시간에 걸친 대환장 삽질은 끝이나고 말았다.
마무리
web.xml에서 Encoding Filter는 SecurityFilterChain보다 앞에 있어야 한다.
※ 본 글은 개인 포트폴리오 혹은 공부용으로 사용하기 때문에, 무단 복사 유포는 금지하지만, 개인 공부 용도로는 얼마든지 사용하셔도 좋습니다
반응형'백엔드 > Spring' 카테고리의 다른 글
[Spring JPA] 검색 쿼리 - 대소문자 무시하기 (0) 2021.01.02 [Spring JPA] Hibernate 파라미터 출력 설정 (로그 출력) (2) 2020.12.29 [Spring Framework] MVC(모델-뷰-컨트롤러) 패턴에 대해서 알아보자 (0) 2020.11.16 [Spring Framework] Layered Architecture (0) 2020.11.16