본문 바로가기
Development/Java

Spring Framework의 mvc에서 https▶ http 로 redirect 되는 문제 해결 방법

by 버들도령 2019. 6. 25.
728x90

Spring framework mvc에서 https▶ http 로 redirect 되는 문제 해결 방법

Spring Framework에서 redirect 를 사용하는 경우에 https의 페이지에서 redirect를 하더라도 http 프로토콜로 redirect 되는 현상이 발생합니다.

https 로 사용하던 페이지에서 http 로 redirect 되게 되면 의도치 않은 여러가지 문제가 발생할 수 있겠죠.

 - 브라우저에서 보안 문제로 인해 https 페이지에서 http의 리소스를 가져오는 부분. (http에서 https의 리소스를 가져오는 것은 가능)

 - 모바일 앱에서 https 로 링크가 걸려있다가 redirect 되면서 http 로 프로토콜이 변경되는 경우 페이지를 보여주지 않음

 

위의 사례 중에 마지막에 언급한 부분에 대해서 알아보겠습니다.

대표적으로 애플이 WWDC 2015에서 앞으로 앱 스토어에 앱을 등록하려면 반드시 ATS(App Transport Security) 를 따라야 한다고 발표했습니다.

iOS9부터 기본으로 탑재되는 ATS (App Transport Security) 가 적용되면서 앱스토어에 앱을 등록하려면 반드시 HTTPS를 사용하도록 하고 있습니다.

기존에 앱에서 사용하던 HTTP 통신은 차단하여 무용지물이 되게 하는 것이죠.

고로.. 기존에 https 로 사용하던 URL이 redirect 되면서 http로 변경되게 되면 ATS에 의해 차단되는 불상사가 생기겠죠.

 

그래서, https ▶ http 로 redirect 가 아닌 https ▶ https 로 redirect 되도록 하기 위해서는 설정이 필요합니다.

설정에 앞서 Redirect하는 소스코드를 예로 들어보면.

Redirect Example
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    /**
     * 회원가입 약관동의 페이지 이동
     * @param model
     * @return
     * @throws Exception 
     */
    @RequestMapping("/member/customer-join-terms.do")
    public String memberJoin1Term(Model model, HttpServletRequest request) throws Exception {
        HttpUtil httpUtil = new HttpUtil(request);
        ...
        
        if (httpUtil.isLogining()) {
            return "redirect:/index.do";
        } else {
            return url;
        }
    }

 


별도의 설정이 없는 Spring Framework의 MVC에서 redirect 하게 되면 https 프로토콜을 사용하고 있다하더라도 http 프로토콜로 변경되어 처리됩니다.

이 문제를 해결하기 위해서는 다음과 같이 설정을 추가하시면 됩니다.

Spring Framework 개발 환경에 따라서 다르겠지만

servlet-context.xml 파일에서 InternalResourceViewResolver 클래스를 사용하는 경우와 UrlBasedViewResolver 클래스를 사용하는 경우로 나뉘는데,

① InternalResourceViewResolver 클래스를 사용하는 경우

설정에 다음과 같이 redirectHttp10Compatible 관련 설정을 추가한다.

1
2
3
4
5
6
        <beans:property name="viewClass" value="org.springbyexample.web.servlet.view.tiles2.DynamicTilesView" />
        <beans:property name="prefix" value="/WEB-INF/views/" />
        <beans:property name="suffix" value=".jsp" />
        <beans:property name="redirectHttp10Compatible" value="false" />
    </beans:bean>
 

 

아래의 코드
<beans:property name="redirectHttp10Compatible" value="false" />

 

② UrlBasedViewResolver 클래스를 사용하는 경우

설정에 다음과 같이 redirectHttp10Compatible 관련 설정을 추가한다.

1
2
3
4
<beans:bean p:order="1" id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <beans:property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView" />
    <beans:property name="redirectHttp10Compatible" value="false" />
</beans:bean>

 

아래의 코드
<beans:property name="redirectHttp10Compatible" value="false" />

 

위의 두 가지 설정 중 자신의 개발환경에 맞는 설정을 해준 후 서버를 구동하여 https 에 대한 redirect가 되더라도 정상적으로 https 프로토콜을 유지하는지 확인하도록 합니다.

728x90

댓글