博客
关于我
把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/

    你可能感兴趣的文章
    SpringCloud-Eureka报错 Error creating bean with name解决
    查看>>
    Thymeleaf 生成下标,索引,使用Stat变量
    查看>>
    LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
    查看>>
    全局变量初始化顺序的不确定性引发的bug
    查看>>
    java基础避坑(二)——基础数据类型short
    查看>>
    EOS交易离线签名PHP代码
    查看>>
    i9 11900H和i7 10875h 选哪个
    查看>>
    windows环境tomcat8配置Solr5.5.1
    查看>>
    ValueError: Unexpected end of file.
    查看>>
    webpack-相关报错-持续更新
    查看>>
    基于ios系统的ionic一些奇葩错误
    查看>>
    六、登录(二)
    查看>>
    七、删除功能和模糊查询功能
    查看>>
    第一章、基础入门(一)(SpringBoot2.x)
    查看>>
    Liferay对union的处理
    查看>>
    jQuery动画
    查看>>
    Liferay文件的上传
    查看>>
    初始微服务---Springcloud发展【第一期】
    查看>>
    RAFT 拜占庭将军 共识算法
    查看>>
    UE4 错误列表 error码(只记录我遇到的情况,持续添加,未完成)
    查看>>