博客
关于我
把JSP放到WEB-INF后以保护JSP源代码
阅读量:613 次
发布时间:2019-03-13

本文共 2033 字,大约阅读时间需要 6 分钟。

将JSP文件存放在Web-INF目录下:保护 servlet 应用中的代码

在开发 Web 应用时,保护不公开的资源是至关重要的。对于 Java Web 开发,jsp 源代码的安全性尤为重要。在本文中,我们将探讨如何将 jsp 文件与其他静态资源一起存放于 Web-INF 目录,以确保代码的安全性,同时如何利用 Struts 框架的 forward 方法进行页面跳转。

JSP 文件的安全性存储

传统上,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 框架中的页面跳转

    Struts 框架中,可以使用 forward 标签或 Action 类的 perform 方法来实现页面跳转。例如,在 struts-config.xml 中定义一个内部链接,可以将跳转控制权交给 Struts 进行处理。

    示例配置

    struts-config.xml 中添加以下配置:

    配置说明

  • <action> 元素:定义了一个新的操作路径 /test,对应的逻辑是在 TestAction 类中定义的方法。

  • <forward> 元素:指定了要跳转到的页面路径。这可以是 jsp 文件,存储在 Web-INF/jsp 目录中。

  • name 属性:定义了一个跳转别名,可以在页面提交按钮上使用。

  • Struts 页面跳转的实现

    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/

    你可能感兴趣的文章
    C++ Primer Plus读书笔记:循环读取(错误处理)
    查看>>
    skimage与cv2 安装失败的解决办法
    查看>>
    关于吴恩达的深度学习的一些授课视频里面英文翻译错误的实例展示
    查看>>
    伴随矩阵和逆矩阵的关系证明
    查看>>
    numpy.linspace使用详解
    查看>>
    突破Bias-Variance困境
    查看>>
    CNN / language modelling and sequence generation
    查看>>
    函数可导和可微的区别: 一元中互为充要;多元中可微是可导的必要条件,可导不一定可微。
    查看>>
    Form窗体属性
    查看>>
    Altium Designer唤出关掉的窗口
    查看>>
    Linux自有服务
    查看>>
    HDU A + B Problem II
    查看>>
    PCL 无序点云的三角剖分
    查看>>
    解决宝塔安装wordpress无法连接到数据库问题
    查看>>
    PAT乙级 15分题目总结
    查看>>
    解决Eclipse加载图片或网页出现404错误
    查看>>
    vue 错误收集
    查看>>
    Java选择排序算法实现
    查看>>
    【笔记】 感受野与权值共享 摄像头标定 相机坐标与世界坐标
    查看>>
    00010.02最基础客户信息管理软件(意义类的小项目,练习基础,不涉及数据库)
    查看>>