2016-10-04 6 views
0

例:1]のindex.html 2] some.html(またはJSP)だから私は呼び出す場合ブラウザから直接アクセスできないページを作成するには?

ブラウザから

のみのindex.htmlにアクセスすることで、

:私は私のウェブアプリで2つのファイルを持っていますlocalhost:8080/index.html、それは実際のページを返す必要がありますし、ロード時に私はsome.htmlに直接(リダイレクト)場合some.htmlページが表示されるはずです

私は直接localhostを呼び出す:8080/some .html、それはページに直接アクセスすることはできませんエラーをスローする必要があります、私はTomcatサーバーでwebappをホストする場合、これを達成する方法はありますか?

答えて

3

よくある解決策は、WEB-INFディレクトリの下に移動することです。ここから彼らは、WEB-INFディレクトリ公にアクセス可能ではないですが、あなたがそれらを楽しみにサーブレットまたはいくつかの他のコントローラを持つことができます

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

アプリケーションのパブリックドキュメントツリーの一部ではありません。 WEB-INFディレクトリに含まれるファイルは、コンテナによってクライアントに直接提供されることはありません。 しかし、 WEB-INFディレクトリの内容のgetResource とgetResourceAsStream()メソッドのServletContextに呼び出すか が転送するRequestDispatcherを使用して/含ま使用してコードをサーブレットに見えます。

代わりに、これらを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は、ユーザーが別のページにアクセスしようとすると表示されるそれぞれのエラーメッセージで設計できます。

関連する問題