2011-09-02 46 views
15

私のアプリケーションにはstruts 1.3が使用されています。すべてのJSPページはコントローラ(アクションクラス)を介して転送されます。しかし、jspページに直接アクセスすると、アクセスできます。これをどうやって防ぐのですか?jspページへの直接アクセスの拒否

答えて

16

のために良いチュートリアルですs。

+1

+1 - WEB-INF隠蔽が最も一般的に使用される方法です。あなたがドキュメントや例を読んだら、彼らはしばしばこの設定を使います。 – pap

1

あなたはフィルタを使用しての.jspページをお願いしてのみ許可するURLを持つ要求を制限することができますを求める要求.doというフィルタをバイパスするか、割り込み要求を、その制限するフィルタを使用するために使用されている

4

urlに.doが含まれていない場合はリクエストしてください。以下はjsp-の位置に関する(WEB-INF/JSPフォルダ内など)WEB-INFフォルダ内のすべてのあなたのjsp-Sを入れて、あなたのマッピングを変更することを忘れていけないのフィルター

Filters

2

私は最良の選択肢は、WEB-INFフォルダ内のWebページを配置することだと思う - 彼らは直接アクセスすることはできませんが、その後、あなたのサーブレットであなたのようなもの持つことができる方法:

public class ControllerServlet extends HttpServlet { 

    /** 
    * Handles the HTTP <code>GET</code> method. 
    * @param request servlet request 
    * @param response servlet response 
    * @throws ServletException if a servlet-specific error occurs 
    * @throws IOException if an I/O error occurs 
    */ 
    @Override 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { 

     String userPath = request.getServletPath(); 

     // if category page is requested 
     if (userPath.equals("/category")) { 
      // TODO: Implement category request 

     // if cart page is requested 
     } else if (userPath.equals("/viewCart")) { 
      // TODO: Implement cart page request 

      userPath = "/cart"; 

     // if checkout page is requested 
     } else if (userPath.equals("/checkout")) { 
      // TODO: Implement checkout page request 

     // if user switches language 
     } else if (userPath.equals("/chooseLanguage")) { 
      // TODO: Implement language request 

     } 

     // use RequestDispatcher to forward request internally 
     String url = "/WEB-INF/view" + userPath + ".jsp"; 

     try { 
      request.getRequestDispatcher(url).forward(request, response); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
    } 

を撮影者:http://netbeans.org/kb/docs/javaee/ecommerce/page-views-controller.html