2016-10-04 41 views
0

恩:我有兩個文件在我的web應用程序:1]的index.html 2] some.html(或JSP)如何使某些頁面無法直接從瀏覽器訪問?

從瀏覽器中唯一的index.html是可訪問,

所以如果我打電話本地主機:8080/index.html,它應該返回實際頁面,並加載如果我直接(重定向)some.html然後some.html頁面應該顯示,

如果我直接調用localhost:8080 /一些.html,它應該拋出一個錯誤,該頁面不能直接訪問,有沒有一種方法可以實現這一點,如果我在tomcat服務器上託管webapp?

回答

3

一個常見的解決方案是將它們移到WEB-INF目錄下。從這裏,他們不是公開訪問,但你可以有一個Servlet或其他一些控制着他們

https://docs.oracle.com/cd/E21764_01/web.1111/e13712/configurewebapp.htm#WBAPP158

的WEB-INF目錄不是 應用的公共文檔樹的一部分。包含在WEB-INF目錄中的文件不能通過容器直接送達到客戶端 。 但是,使用getResource 和ServletContext上的getResourceAsStream()方法調用,使用RequestDispatcher包含/轉發時,servlet代碼可以看到WEB-INF目錄中 的內容。

另一種方法是將它們留在WEB-INF之外並在web.xml中配置一個安全約束。對於eaxmple,如果你在{webapp-root}/pages中有它們:

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>JSP Files</web-resource-name> 
     <description>No direct access to JSP files</description> 
     <url-pattern>/pages/*</url-pattern> 
     <http-method>POST</http-method> 
     <http-method>GET</http-method> 
    </web-resource-collection> 
    <auth-constraint> 
     <description>No direct browser access to JSP files</description> 
     <role-name>NobodyHasThisRole</role-name> 
    </auth-constraint> 
</security-constraint> 
1

使用Filters並且拒絕訪問jsp's

public class FilterMyJsp implements Filter{ 
    public void doFilter(ServletRequest request, ServletReponse response,     
     FilterChain chain) { 
     HttpServletRequest req= (HttpServletRequest) request; 
     req.getRequestDispather("HandleError.jsp").forward(request,response); 
} 
} 

的web.xml <filter> <filter-name>FilterMyJsp</filter-name> <filter-class>my.FilterMyJsp</filter-class> </filter> <filter-mapping> <filter-name>FilterMyJsp</filter-name> <url-pattern>*.jsp</url-pattern> </filter-mapping>

URL模式*將這個過濾器應用到每個JSP的的。您可以設計HandleError.jsp並顯示相應的錯誤消息,當用戶嘗試訪問其他頁面時將顯示該錯誤消息。

相關問題