要理解这个问题,我会解释一下情况:
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?这有什么解决方法吗?我不是安全专家,也许我正在做的是完全错误的?
感谢您的帮助,
谢尔盖。
答案 0 :(得分:1)
确实如此。此行放在生成的servlet文件中(jsp编译为servlet)是request.getRequestDispatcher("target.jsp").forward(req, resp)
。
这并不意味着doGet()
方法返回 - 它将继续执行。
这就是为什么你应该使用Filter
来添加安全检查。如果不符合条件,则不要拨打chain.doFilter()
,而是重定向到“禁止”页面。