jsp에서 form 전송한 데이터 중 특수문자를 java단에서 HTML entity 형식으로 읽어들여서 변환이 필요했다.
데이터가 달라지는 것은 클라이언트에서 서버로 데이터를 전송할때 보안상의 이유로 인코딩하도록 필터를 적용해놓았기 때문이다.
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import com.navercorp.lucy.security.xss.servletfilter.XssEscapeServletFilter;
@Bean
public FilterRegistrationBean<HTMLTagFilter> htmlTagFilter() {
FilterRegistrationBean<HTMLTagFilter> registrationBean = new FilterRegistrationBean<>();
registrationBean.setFilter(new HTMLTagFilter());
registrationBean.addUrlPatterns("*.do");
return registrationBean;
}
@Bean
public FilterRegistrationBean<XssEscapeServletFilter> xssEscapeServiceFilter() {
FilterRegistrationBean<XssEscapeServletFilter> registrationBean = new FilterRegistrationBean<>();
registrationBean.setFilter(new XssEscapeServletFilter());
registrationBean.addUrlPatterns("/*");
return registrationBean;
}
네이버에서 제공하는 lucy-xss-servlet filter인데 이 부분은 따로 내용을 정리하여 포스팅할 예정이다.
아무튼 대표적인 HTML entity는 아래와 같다.
character | entity |
& | & |
" | " |
< | > |
> | > |
공백 | |
이는 StringEscapeUtils 클래스를 통해 해결할 수 있다.
entity를 문자로 변환하기 위해서는 unescapeHtml 함수를 사용한다.
StringEscapeUtils.unescapeHtml(previousUrl);
디코딩(decoding)할 문자열을 파라미터로 주면 원하는 결과를 얻을 수 있다.
HTML 뿐만 아니라 Java, Java Script, XML 및 SQL에 대해서 unescape 하는 함수 그리고 반대로 escape 하는 함수도 포함되어 있으니 활용하면 좋을 것 같다.