【发布时间】:2017-07-16 00:54:06
【问题描述】:
我要解决的问题是,我有一个在 Tomcat 7 上运行的 Web 项目,其中大部分是可公开访问的 JSP 页面,但也有一些不打算公开访问的 JSP 页面。这些“私有”页面被各种 servlet 使用,如下所示:
response.setContentType(...);
request.getRequestDispatcher("/private/example.jsp").include(request, response);
我希望 RequestDispatchaer#include() 可以访问私有 JSP 页面,但如果客户端导航到例如,不能 /private/example.jsp 直接。
我现在处理的方式是从 servlet 设置请求属性:
request.setAttribute("okToAccess", true);
然后在 JSP 页面中检查该属性,如果未找到则返回一个空文档。这样做的两个缺点是:
- 代码很像样板,写起来很烦人。
- 通过
include调度的 Servlet 无法修改响应状态/标头,所以我不能,例如从 JSP 发回 403 或 404,我必须实现稍微复杂一点的逻辑,以让调用 servlet 发出错误响应。
我的问题是:有没有更简洁的方法来阻止对这些“私有”JSP 的直接访问,同时仍然让它们与include() 一起使用?我可以输入web.xml 或其他什么?
【问题讨论】:
标签: jsp servlets requestdispatcher