controller에 접근하지 않고 jsp에 직접 접근하는 이슈

2013-10-31 11:26

지금까지 spring mvc를 사용하면서 다음과 같은 구조로 프로젝트를 진행했다.

project - WEB-INF/jsp

와 같이 jsp 파일을 WEB-INF에 두고 다음과 같이 설정해 사용했다.

<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
    <property name="prefix" value="/WEB-INF/jsp/" />
    <property name="suffix" value=".jsp" />
    <property name="order" value="2" />
</bean>

WEB-INF에 jsp를 두는 이유는 보안상 WEB-INF 디렉토리에 외부에서 직접 접근할 수 없기 때문에 보안상 좋기 때문이다. 위와 같은 구조로 개발할 때는 이슈가 없었다.

그런데 이번 학기에 수업을 하면서 JSP 파일을 웹 기본 디렉토리에서 관리했다. 그랬더니 다음과 같은 이슈가 생겼다. 분명 Controller에 "/"에 대한 설정을 했음에도 불구하고 http://localhost:8080와 같이 접근했을 때 Controller에 직접 접근하지 않고 index.jsp에 직접 접근하는 현상이 발생했다. 처음에 이 이슈 때문에 약간의 삽질한 경험이 있다.

일단 해결책으로 index.jsp가 아니라 home.jsp와 같이 다른 파일로 이름을 변경한 후 해결하기는 했다. 다른 해결책이 있을 것으로 생각하는데 아직까지 찾지 못했다. 수업 중에 사용한 설정은 다음과 같다.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<web-app [...]>
    [...]


    <servlet>
        <servlet-name>next</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
          
    <servlet-mapping>
        <servlet-name>next</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>
<bean id="viewResolver"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver"
    p:order="2" p:prefix="/" p:suffix=".jsp" />

혹시 비슷한 이슈 때문에 삽질하고 있는 개발자가 있다면 jsp 위치를 WEB-INF/jsp와 같이 다른 경로로 변경하거나 index.jsp가 아닌 다른 이름을 사용해 해결할 수 있다. 가장 추천하는 방법은 jsp를 가능하면 WEB-INF에서 관리할 수 있다.

이외에 다른 해결책을 찾아봐도 좋겠다.

0개의 의견 from FB

2개의 의견 from SLiPP

2013-10-31 11:50

spring context에서 해당 request를 처리하지 않았다는 이야기는 서블릿 컨테이너(톰캣)에서 먼저 선 처리하고 response를 준 것 같은데요? 즉, web.xml등 서블릿 설정에서 filter가 필요하지 않을까요?

의견 추가하기