jsp:在jsp中转发:include不阻止原始页面完成处理?

时间:2012-03-01 20:29:47

标签: java jsp servlets

要理解这个问题,我会解释一下情况:
main.jsp - 应用程序的主窗口
jsp_seacurity.jsp - 发送重定向的JSP文件,以防用户无权访问给定页面(我创建了单独的文件以在不同页面中重复使用)
noaccess.jsp - 访问被拒绝的页面

在我的main.jsp中,第一行之一是:

<jsp:include page="jsp_security.jsp?bo_item=main&bo_permission=view"/>

在jsp_security.jsp中我做了一些检查,如果用户没有特定部分应用程序的权限,我有以下代码:

<jsp:forward page="noaccess.jsp"/>

在未经main.jsp许可的情况下用户登录后,我注意到,Glassfish在日志文件中显示异常,这是在我的jsp:include之后的main.jsp的某行中发生的。我检查了jsp:include文档,这就是我找到的

  

当include操作完成时,JSP容器继续   处理JSP文件的其余部分。

现在的问题是,即使在jsp_security.jsp中执行jsp:forward之后,它是否继续处理main.jsp?这有什么解决方法吗?我不是安全专家,也许我正在做的是完全错误的?

感谢您的帮助,
谢尔盖。

1 个答案:

答案 0 :(得分:1)

确实如此。此行放在生成的servlet文件中(jsp编译为servlet)是request.getRequestDispatcher("target.jsp").forward(req, resp)

这并不意味着doGet()方法返回 - 它将继续执行。

这就是为什么你应该使用Filter来添加安全检查。如果不符合条件,则不要拨打chain.doFilter(),而是重定向到“禁止”页面。