복붙노트

[SPRING] 정적 컨텐츠를 제공하는 Tomcat

SPRING

정적 컨텐츠를 제공하는 Tomcat

스프링 애플 리케이션이 있고 정적 인 컨텐츠를 제공하는 가장 좋은 방법이 궁금합니다. 나는 다음을 시도했다.

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/static/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>app</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

이것은 작동하지만 DefaultServlet의 동작은 / static / PATH 형식의 모든 요청이 webapp / PATH의 파일을 제공한다는 것을 의미합니다. 이것은 엄청난 취약점을 드러내며 다음과 같은 URL로 중요한 정보를 보여줍니다 : http : //localhost/app/static/META-INF/context.xml

이것에 대한 일반적인 해결책은 무엇입니까? 민감한 파일을 이동해야합니까? 내 자신의 DefaultServlet을 작성 하시겠습니까? 아니면 정적 인 콘텐츠를 제공하는 더 좋은 방법이 있습니까?

해결법

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

    1.정적 컨텐츠를 제공하는 몇 가지 더 좋은 방법이 있습니다.

    정적 컨텐츠를 제공하는 몇 가지 더 좋은 방법이 있습니다.

    전통적인 방식은 UrlRewriteFilter를 사용하여 URL을 다음과 같이 다시 매핑하는 것입니다.

    веб.хмл :

    <filter>
        <filter-name>UrlRewriteFilter</filter-name>
        <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>UrlRewriteFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    ...
    <servlet-mapping>
        <servlet-name>Spring MVC Dispatcher Servlet</servlet-name>
        <url-pattern>/app/*</url-pattern>
    </servlet-mapping>
    

    urlrewrite.xml :

    <urlrewrite default-match-type="wildcard">
        <rule>
            <from>/images/**</from>
            <to>/images/$1</to>
        </rule>
        <rule>
            <from>/scripts/**</from>
            <to>/scripts/$1</to>
        </rule>
        <rule>
            <from>/styles/**</from>
            <to>/styles/$1</to>
        </rule>
        <rule>
            <from>/**</from>
            <to>/app/$1</to>
        </rule>
    </urlrewrite>
    

    이 접근법은 대부분의 Spring 샘플에서 볼 수 있습니다. Spring 3.0.1에서는 DispatcherServlet을 통해 정적 컨텐츠를 제공 할 수있는 새로운 apporach를 도입했습니다. Spring의 config 파일에서 요소를 사용하여 설정할 수 있습니다. Spring 3.0.4에서는 다중 위치 및 캐시 제어 옵션을 지원하여 확장되었습니다 (15.12.4 mvc : resources 참조).

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

    2.테스트 해 봤어? / META-INF 및 / WEB-INF 폴더는 서블릿 사양에 따라 공개적으로 액세스 할 수 없도록되어 있습니다. 클라이언트는 이것을 위해 404를 얻었어야합니다. 그렇지 않으면 DefaultServlet에 버그가있었습니다.

    테스트 해 봤어? / META-INF 및 / WEB-INF 폴더는 서블릿 사양에 따라 공개적으로 액세스 할 수 없도록되어 있습니다. 클라이언트는 이것을 위해 404를 얻었어야합니다. 그렇지 않으면 DefaultServlet에 버그가있었습니다.

    다음은 Servlet 2.5 사양의 일부입니다.

    업데이트 : 좋아, 나는 내 말을 되 찾는다. 최신 Tomcat 6 및 7에서이를 재현 할 수 있습니다. 이것은 DefaultServlet의 버그입니다. Glassfish 3.0.1에서 잘 작동합니다 (404 반환).

    업데이트 2 :이 문제는 Tomcat 사용자에게 50026 호로보고했습니다.

    업데이트 3 : Tomcat 사용자 중 한 명이 다음과 같이 응답했습니다.

    업데이트 4 : 궁극적으로 수정했습니다.

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

    3.WEB-INF 및 META-INF는 개인 폴더입니다. 클라이언트가이를 위해 404 오류를 가져와야합니다. META_INF 내용은 직접 액세스 할 수 없으므로 그렇지 않으면 WEB_INF의 모든 민감한 파일을 이동하십시오.

    WEB-INF 및 META-INF는 개인 폴더입니다. 클라이언트가이를 위해 404 오류를 가져와야합니다. META_INF 내용은 직접 액세스 할 수 없으므로 그렇지 않으면 WEB_INF의 모든 민감한 파일을 이동하십시오.

  4. from https://stackoverflow.com/questions/3822524/tomcat-serving-static-content by cc-by-sa and MIT license