multipart/form-data으로 데이터를 넘길 경우 XSS Filter를 타지 않는다는 걸 알게되었다. 그래서 MultipartFilter를 먼저 탄 후 XSS Fileter를 탈 수 있도록 lucy-xss-filter를 적용했다.
하지만 데이터를 넘겨줬을 때 request를 request가 한번더 감싼 형태로 넘어와 fileList가 null이 되어버리는 문제가 발생했다!😥
그래서 이리저리 찾아보던 중 MultipartResolver의 alias를 fileMultipartResolver로 변경하고 web.xml에 선언한 MultipartFilter의 init-param을 지워주면 해결이 된다는 글을 보았다!!
<alias name="local.MultiCommonsMultipartResolver" alias="fileMultipartResolver"/>
<!-- multipartResolver를 fileMultipartResolver로 변경 -->
<filter>
<filter-name>multipartFilter</filter-name>
<filter-class>org.springframework.web.multipart.support.MultipartFilter</filter-class>
<!-- <init-param>
<param-name>multipartResolverBeanName</param-name>
<param-value>fileMultipartResolver</param-value>
</init-param> --> ##해당 부분 제거😊
</filter>
<filter-mapping>
<filter-name>multipartFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
위처럼 수정한 후 다시 코드를 실행했더니 이제는
com.navercorp.lucy.security.xss.servletfilter.XssEscapeServletFilterWrapper cannot be cast to org.springframework.web.multipart.MultipartHttpServletRequest
에러가 발생했다... 하지만 에러를 보면 알 수 있듯이 MultipartHttpServletRequest로 캐스팅할 수 없어 발생한 에러이기 때문에 기존에 파라미터로 받아주던 HttpServletRequest를 MultipartHttpServletRequest로 수정하여 문제를 해결하였다!
이후 코드 정상 작동 확인!
📌 multipart로 데이터를 받을 경우에는 MultipartHttpServletRequest를 사용하는게 그냥 편할 것 같다!
해당 request는 HttpServletRequest를 확장한 인터페이스이기 때문에 별다른 문제가 발생하지 않을 것 같다.