2011-09-02 200 views
15

我對我的應用程序使用struts 1.3,並且所有jsp頁面都通過控制器(操作類)轉發。但是如果我直接訪問jsp頁面,我可以訪問它。我如何防止這種情況?拒絕直接訪問jsp頁面

回答

16

把所有的JSP-S內部WEB-INF文件夾(例如,在WEB-INF/jsp的文件夾),不要忘了更改關於JSP-位置映射秒。

+1

+1 - WEB-INF隱藏是最常用的方法。如果您閱讀文檔和示例,他們通常會使用此設置。 – pap

1

您可以使用過濾器和限制使用URL這要求.jsp頁面,只允許請求其索要請求。做

4

過濾器是用來繞過或中斷請求,所以使用過濾器來限制請求,如果它不包含URL中的.do。下面是很好的教程濾波器

Filters

2

我認爲最好的辦法是把你的網頁在WEB-INF文件夾 - 這樣,他們將無法直接訪問,但隨後在小服務程序,你可以有這樣的:

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