使JSP可通过RequestDispatcher访问#仅包含
我试图解决的问题是,我有一个在Tomcat7上运行的web项目,其中大部分都是可公开访问的JSP页面,但也有一些JSP页面是不可公开访问的。这些“私有”页面由各种servlet使用,如下所示:使JSP可通过RequestDispatcher访问#仅包含,jsp,servlets,requestdispatcher,Jsp,Servlets,Requestdispatcher,我试图解决的问题是,我有一个在Tomcat7上运行的web项目,其中大部分都是可公开访问的JSP页面,但也有一些JSP页面是不可公开访问的。这些“私有”页面由各种servlet使用,如下所示: response.setContentType(...); request.getRequestDispatcher("/private/example.jsp").include(request, response); 我希望私有JSP页面可以通过requestDispatcher#include()
response.setContentType(...);
request.getRequestDispatcher("/private/example.jsp").include(request, response);
我希望私有JSP页面可以通过requestDispatcher#include()
访问,但如果客户机直接导航到例如/private/example.JSP,则不能访问
我现在处理这个问题的方式是从servlet设置一个请求属性:
request.setAttribute("okToAccess", true);
然后在JSP页面中检查该属性,如果找不到,则返回一个空文档。这有两个缺点:
include调度的servlet不能修改响应状态/头,因此我不能从JSP发回403或404,我必须实现稍微复杂一些的逻辑,让调用servlet发出错误响应
我的问题是:有没有更干净的方法来阻止对这些“私有”JSP的直接访问,同时仍然允许它们与
include()
一起使用?我可以放入web.xml
或其他什么东西?存储在web-INF中的任何内容都不会直接由web容器提供。将您的私有jsp文件放在该文件夹中,以通过servlet强制请求。存储在WEB-INF中的任何内容都不会直接由WEB容器提供服务。将您的私有jsp文件放在该文件夹中,以强制请求通过servlet。如何在WEB-INF文件夹中编译它?太棒了!“我不知道我可以把任意的东西放在里面。”我想这是可行的。我看到有人提到它。我没有做足够的挖掘来找到一个正式的规范。它将如何在WEB-INF文件夹中编译?太棒了!“我不知道我可以把任意的东西放在里面。”我想这是可行的。我看到有人提到它。我没有做足够的挖掘来找到官方的规格。