本文共 2033 字,大约阅读时间需要 6 分钟。
在开发 Web 应用时,保护不公开的资源是至关重要的。对于 Java Web 开发,jsp
源代码的安全性尤为重要。在本文中,我们将探讨如何将 jsp
文件与其他静态资源一起存放于 Web-INF
目录,以确保代码的安全性,同时如何利用 Struts
框架的 forward
方法进行页面跳转。
传统上,jsp
文件通常存放在应用程序的根目录或特定子目录中。然而,这种方法存在一个弱点:这些文件可能被直接访问或窃取。而将这些文件存放于 Web-INF
目录则可以有效保护它们。
Web-INF
目录的作用Web-INF
是一个特殊的目录,与 servlet 容器的默认文档树不包含的部分相对应。任何attempt to access /Web-INF
及其子目录的资源都不会被浏览器直接访问,也不会作为响应传给客户端。这个特性可以用来保护编译后的 servlet 二进制文件以及敏感的 jsp
源代码。
JSP
文件与 Web-INF
目录的最佳实践将需要保护的 jsp
文件复制到 Web-INF
目录及其子目录,例如 /Web-INF/jsp
,这样可以避免这些文件被直接访问。然而,这样的存储方式需要注意以下几点:
URL 访问方式:当调用这些页面时,需要通过 servlet 引擎进行处理,不能直接以 http://
URL 访问。
安全跳转方式:建议采用 forward
方法进行页面跳转,而不是 redirect
,因为后者会导致页面在浏览器中重新加载。
在 Struts
框架中,可以使用 forward
标签或 Action
类的 perform
方法来实现页面跳转。例如,在 struts-config.xml
中定义一个内部链接,可以将跳转控制权交给 Struts
进行处理。
在 struts-config.xml
中添加以下配置:
<action>
元素:定义了一个新的操作路径 /test
,对应的逻辑是在 TestAction
类中定义的方法。
<forward>
元素:指定了要跳转到的页面路径。这可以是 jsp
文件,存储在 Web-INF/jsp
目录中。
name
属性:定义了一个跳转别名,可以在页面提交按钮上使用。
在 TestAction
类中,perform
方法获取映射信息并返回 ActionForward
对象:
public class TestAction extends Action { public ActionForward perform(ActionMapping mapping, HttpServletRequest req, HttpServletResponse res) { return mapping.findForward("test"); }}
继承 Action
类:所有 Struts
控制类都需要继承于 Action
类。
访问域名:在 jsp
页面中,确保使用合法的 Action
类别名。
防止未经授权访问:即使 jsp
存放在 Web-INF
目录,仍需确保应用逻辑和数据库访问的安全性。
Web-INF
目录外的静态资源访问在某些情况下,可能需要访问 Web-INF
目录外部的 htm
或其他静态资源文件。为此,可以通过 servlet
配置来实现。
打开 Tomcat 的配置文件 conf/web.xml
。
添加以下 servlet-mapping
元素:
jsp *.jsp
我们需要添加第二个 servlet-mapping
元素,以支持 htm
文件:
jsp *.html
RequestDispatcher dispatcher = req.getRequestDispatcher("/Web-INF/a.htm");dispatcher.forward(req, res);
这样,用户可以安全地访问 Web-INF
目录下的 htm
文件,同时防止源代码泄漏。
将 jsp
文件存放在 Web-INF
目录下,可以有效保护代码免于窃取和未经授权访问。结合 Struts
框架的 forward
跳转方式,可以在确保安全的前提下,实现用户友好的页面导航体验。在实际项目中,建议根据具体需求选择最合适的存储和访问策略,以平衡安全性和用户体验。
转载地址:http://luhaz.baihongyu.com/