자바(Java)/JAVA 2EE

JSP 페이지에 URL 접근 거부 걸기

본클라쓰 2009. 8. 10. 13:57

JSP 페이지에 URL 접근 거부는 JSP 페이지에 직접적인 URL 접근을 막는 방법

 

 직접적인 JSP 페이지 URL 호출을 막는 방법에는 두 가지가 있다. JSP페이지를 WEB-INF 디렉토리 아래에 두는 방법과 wbe.xml 에서 URL 제한을 두는 방법이다.

 



 

JSP를 WEB-INF 디렉토리 밑에 두는 방법


 모든 JSP페이지를 WEB-INF 디렉토리 아래에 두는 방법이다. WEB-INF 디렉토리는 클라이언트에게는 접근이 금지되어 있으나, 컨테이너는 접근이 허용된다. 다시 말하면 사용자는 /WEB-INF/ 아래의 JSP페이지를 URI로 접근하여 실행할 수 없으나 컨테이너는 실행 가능하다는 것이다.


스트러츠의 경우는 아래처럼 JSP 페이지를 /WEB-INF 아래에 배치하여 매핑을 정의하면 된다.

<action  path="/saveSubscription" type="example.SaveSubscriptionAction">
   <forward="/WEB-INF/jsp/subscription.jsp"/>
</action>

 

 이 방법은 그러나 JSP페이지와 HTML/이미지 파일이 분리되어 존재하므로 다소 혼란스럽고, 화면 개발시 상대경로를 확인하기 위해 JSP페이지의 매핑경로를 알아야하는 불편이 있다.

 


 


web.xml에서 JSP페이지 접근 제한 지정 하는 방법


 Web.xml에 *.jsp 패턴의 모든  URL에 대해서 누구도 실행을 할 수 없게 설정해 줄 수 있다. 아래와 같이 세팅하면 된다. 단점은 패턴에 일치하는 문서는 누구도 실행시킬 수 없다는 것이다. 이 방법은 MVC2 패턴을 사용하지 않고, Model1방식으로 작성했다면 모든 페이지가 접근이 거부된다. 즉, URL을 변경하여 사용할 수 있는 MVC2 패턴이 아니라면 사용하지 않는것이 좋다.

 

<security-constraint>


    <display-name>JSP Protection</display-name>


    <web-resource-collection>
        <web-resource-name>SecureJSPPages</web-resource-name>
        <url-pattern>*.jsp</url-pattern>
    </web-resource-collection>


    <auth-constraint>
        <role-name>nobody</role-name>
    </auth-constraint>


</security-constraint>
 

<security-role>


    <description>Nobody should be in this role so JSP files are protected from direct access.</description>
    <role-name>nobody</role-name>


</security-role>


 사용자가 JSP페이지를 URL로 직접 접근하게 되면 서버는 HTTP응답코드 401번(Unauthorized) 페이지를 보여준다.

 

<!-- 접근 권한없음 : UNAUTHORIZED-->
<error-page>
    <error-code>401</error-code>
    <location>/error/unauthorized.html</location>
</error-page>