【发布时间】:2011-11-09 02:16:04
【问题描述】:
我在我的应用程序中使用 struts 1.3,所有 jsp 页面都通过控制器(动作类)转发。但是如果我直接访问jsp页面,我就可以访问它。如何防止这种情况发生?
【问题讨论】:
我在我的应用程序中使用 struts 1.3,所有 jsp 页面都通过控制器(动作类)转发。但是如果我直接访问jsp页面,我就可以访问它。如何防止这种情况发生?
【问题讨论】:
我认为最好的选择是将您的网页放在 WEB-INF 文件夹中 - 这样它们就不会被直接访问,但是在您的 servlet 中您可以有类似的东西:
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
【讨论】:
把你所有的jsp-s放在WEB-INF文件夹中(例如WEB-INF/jsp文件夹),不要忘记改变你的jsp-s位置映射。
【讨论】:
过滤器用于绕过或中断请求,所以使用过滤器来限制请求,如果它的url中不包含.do。下面是过滤器的好教程
【讨论】:
您可以使用过滤器并使用请求 .jsp 页面的 url 限制请求,并且只允许请求 .do 的请求
【讨论】: