Scenario
원래 Spring Project에서 http request/response를 json 형태로 주고받았으나 jsp를 리턴해줄 경우가 생겼다. 그러나 jsp 리소스를 리턴해주려고하니 몇가지 에러가 나는 것 이었다.
1.jsp 자원을 요청해주는 버튼을 클릭하니
아래와 같은 문구가 chorme console 창에 뜨는 것이 아닌가?
Refused to display 'http://localhost:8080/xxx/xxx' in a frame because it set
'X-Frame-Options' to 'DENY'.
구글링을 해보니 "기본적으로 X-Frame-Options는 클릭 잭킹 공격을 막기 위해 거부 됨으로 설정됨" 이라고 한다.
*클릭재킹: 웹 사용자가 자신이 클릭하고 있다고 인지하는 것과 다른 어떤 것을 클릭하게 속이는 악의적인 기법
2. Spring Security 설정을 통해 (1) 번 문제는 고칠 수 있엇으나, 이제는 갑자기 404에러가 났다.
<mvc:view-resolvers>
<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="order" value="0"/>
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
</bean>
</mvc:view-resolvers>
위와 같이 설정된 return values handler 설정을 고친 방법을 알아보자.
Solution
1. X-frame-Options 해결방법.
xml 설정을 사용중이라면 Filter체인에서 아래와 같이 headers 설정을 해주면 된다.
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:security="http://www.springframework.org/schema/security">
<security:http>
<security:headers>
<security:frame-options disabled="true"></security:frame-options>
</security:headers>
</security:http>
</beans>
2. Jsp resource 404 not found 해결방법.
ReturnValuesHandler의 프로젝트 내부의 경로옵션인 prefix와 suffix를 써주지 않아서 jsp 리소스를 써주지 않아서 일어난 일이다. 보통 jsp 리소스를 /WEB-INF/views에 많이 놓지만, 나는 /jsp/ 라는 폴더에 넣어주었다.
<mvc:view-resolvers>
<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="order" value="0"/>
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
</mvc:view-resolvers>
위와 같이 설정해주니 잘 동작하였다.
--------------
'To be Developer > Spring' 카테고리의 다른 글
DispatcherServlet 에서 url-pattern 속성의 의미와 사용법 (1) | 2019.04.11 |
---|---|
Junit MockMvc NotReuseHttpServletRequest 에 대해서. (0) | 2019.04.09 |
WebAplicationContext 란? (1) | 2018.05.17 |
[AOP]Root Aplication Context, Servlet Context 그리고 AOP (0) | 2018.04.06 |
[Spring]Container의 관계 (0) | 2017.09.19 |