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>
'자바(Java) > JAVA 2EE' 카테고리의 다른 글
JSP 변수 선언 (0) | 2009.08.25 |
---|---|
JSP의 스크립트 요소란 (0) | 2009.08.25 |
표현언어(Expression Language) (0) | 2009.08.07 |
페이지 파라미터 확인 후 null 일때 기본값 지정하기 (0) | 2009.08.05 |
인크루드 액션태그와 인크루드 디렉티브의 차이점 (0) | 2009.06.15 |