복붙노트

[SPRING] Tomcat은 웹 응용 프로그램의 컨텍스트에 후행 슬래시를 추가하지 않습니다.

SPRING

Tomcat은 웹 응용 프로그램의 컨텍스트에 후행 슬래시를 추가하지 않습니다.

URL을 입력하지 않으면 Tomcat이 내 앱 컨텍스트에 후행 슬래시를 자동으로 추가하도록하고 싶습니다.

부두에서 테스트 할 때 자동으로 내 슬래시가 내 앱 컨텍스트에 추가되지만 Tomcat에서는이를 수행하지 않습니다.

WAR를 다른 사람에게 넘기므로 배포 된 컨텍스트의 이름이 무엇인지 불확실합니다. 따라서 HTML의 리소스 참조는 모두 상대적입니다. Tomcat이 후행 슬래시가 추가 된 동일한 컨텍스트로 자동으로 리디렉션되도록하는 방법이 있습니까?

현재 Tomcat 7 with Spring 3 사용하기.

해결법

  1. ==============================

    1.오래된 게시물이지만 Tomcat 7.0.67부터 context.xml 파일에 다음 속성을 추가해야합니다.

    오래된 게시물이지만 Tomcat 7.0.67부터 context.xml 파일에 다음 속성을 추가해야합니다.

    <Context mapperContextRootRedirectEnabled="true">...</Context>
    

    7.0.67 변경 로그 기준 :

    그리고 Tomcat 문맥 문서에서 :

  2. ==============================

    2.응용 프로그램의 web.xml에 "/ *"에 대한 매핑이있는 것으로 보입니다. 서블릿 매핑을 "/ *"로 설정하면 tomcat이 요청을있는 그대로 웹 응용 프로그램에 전달합니다 (즉, 리디렉션하지 않음).

    응용 프로그램의 web.xml에 "/ *"에 대한 매핑이있는 것으로 보입니다. 서블릿 매핑을 "/ *"로 설정하면 tomcat이 요청을있는 그대로 웹 응용 프로그램에 전달합니다 (즉, 리디렉션하지 않음).

    올바르게 리디렉션하려면 "/ *"매핑을 "/"로 변경해야하며, 후자는 기본 서블릿을 의미합니다.

  3. ==============================

    3.Tomcat은 자동으로 후행 슬래시를 추가합니다. Tomcat에서 제공하는 예제 애플리케이션으로 테스트 해보자.

    Tomcat은 자동으로 후행 슬래시를 추가합니다. Tomcat에서 제공하는 예제 애플리케이션으로 테스트 해보자.

    특별한 구성으로 인해 - 쿼리 문자열을 검사하고 응용 프로그램에서 필요에 따라 리디렉션하는 필터를 작성합니다. 어쨌든 이것은 여러 번 필요합니다 (http-> https 리다이렉션 등)

  4. ==============================

    4.Tomcat에서 URL 재 작성을 시도해 보셨습니까? 도움이 될 수도 있습니다. http://code.google.com/p/urlrewritefilter/

    Tomcat에서 URL 재 작성을 시도해 보셨습니까? 도움이 될 수도 있습니다. http://code.google.com/p/urlrewritefilter/

    도움이되지 않으면 다음을 살펴보십시오. tomcat web.xml의 URL 재 작성

  5. ==============================

    5.Pat의 탁월한 대답은 이것에 대한 몇 가지 세부 사항을 파헤치는 데 도움이되었습니다. 이것은 세션 쿠키 및 URL 리디렉션과 관련된 Tomcat의 일부 버전 (7.0.67 이상의 Tomcat 7 및 8.29 및 8.37의 Tomcat 8)과 관련이있는 것으로 보입니다.

    Pat의 탁월한 대답은 이것에 대한 몇 가지 세부 사항을 파헤치는 데 도움이되었습니다. 이것은 세션 쿠키 및 URL 리디렉션과 관련된 Tomcat의 일부 버전 (7.0.67 이상의 Tomcat 7 및 8.29 및 8.37의 Tomcat 8)과 관련이있는 것으로 보입니다.

    결론은 자바 서버가 끝에 "/ app_name /"과 같이 슬래시가있는 경로 특정 세션 쿠키를 만드는 경우 서버가 자동 초기 리디렉션 (/ app_name -> / app_name)을 수행해야한다는 것입니다. /) ... 그렇지 않으면 세션 쿠키가 요청과 함께 전송되지 않으며 유효한 세션이있는 것처럼 서버를 찾지 않습니다. 앱에서 인증까지 리디렉션 루프가 발생할 수 있습니다.

    Tomcat에는 두 가지 동작을 모두 제어하는 ​​설정이 있지만, 내가 알 수있는 한,이 버전에서는 본질적으로 동기화가 이루어지지 않아 리다이렉트를받지 않고 후행 슬래시가있는 쿠키를 얻을 수 있습니다. Tomcat 변경 로그에는 몇 가지 관련 문제 / 변경 사항이 있습니다. https://tomcat.apache.org/tomcat-8.0-doc/changelog.html

    Pat는 이미 언급했듯이이 속성을 앱의 Context 요소에 추가하여 해결할 수 있습니다.

    <Context mapperContextRootRedirectEnabled="true">
    
  6. from https://stackoverflow.com/questions/11055608/tomcat-is-not-adding-trailing-slash-to-web-apps-context by cc-by-sa and MIT license