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>

위와 같이 설정해주니 잘 동작하였다.

 

--------------

*Xframe관련 출처:https://cnpnote.tistory.com/entry/SPRING-Spring-Security%EC%97%90%EC%84%9C-X-Frame-Options%EC%9D%91%EB%8B%B5-%ED%97%A4%EB%8D%94%EB%A5%BC-%EB%B9%84%ED%99%9C%EC%84%B1%ED%99%94%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C

+ Recent posts