【问题标题】:'esapi' is undefined in Websphere 7'esapi' 在 Websphere 7 中未定义
【发布时间】:2014-05-15 15:30:19
【问题描述】:

一直在关注 esapi4java-core-2.0-install-guide.pdf for Eclipse 并将其应用到 Websphere 7.5 环境中。

第 1 步 - 我在库中添加了 esapi.jar(项目 > 属性 > Java 构建路径 > 库选项卡 > 添加外部 JAR)。

第 2 步 - 我将 esapi 和验证 .properties 文件放在我机器上的一个文件夹中。

第 3 步 - 我选择为所有运行配置添加 esapi(Windows > Preferences > Java > Installed JREs)。我突出显示了 WebSphere Application Server v7.0 JRE,选择了“编辑”并将 esapi.jar 添加到该库列表中。在同一个表单上,我将 -Dorg.owasp.esapi.resources="/path/to/.esapi" 参数添加到 Default VM Arguments 提示符,即我的 esapi 和验证 .properties 文件所在的路径。

下面是失败的 JSP 页面上的代码:

<%@ page language="java" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
<%@ page import="java.net.*" %>

<script type="text/javascript" language="javascript">

function validateForm()
{

    var userURL = "http://www.google.com";
    var isValidURL = ESAPI.validator().isValidInput("URLContext", userURL, "URL", 255, false); 
    if (isValidURL) {
        alert("true");
    } else {
    alert("false");
    }
}

</script>

在执行这段代码时,我得到了错误: 'ESAPI' 未定义(发生在 var isValidURL 语句中)。

我错过了什么?

【问题讨论】:

    标签: eclipse installation websphere-7 esapi


    【解决方案1】:

    我没有看到您在 jsp 中导入 esapi 的位置。

    试试这个:

    <%@ page language="java" %>
    <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
    <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
    <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>
    <%@ page import="java.net.*, org.owasp.esapi.ESAPI, org.owasp.esapi.Validator" %>
    
    
    <script type="text/javascript" language="javascript">
    
    function validateForm()
    {
    
        var userURL = "http://www.google.com";
        var isValidURL = <% ESAPI.validator().isValidInput("URLContext", userURL, "URL", 255, false); %>
        if (isValidURL) {
            alert("true");
        } else {
        alert("false");
        }
    }
    
    </script>
    

    另外请注意,我强烈建议在接收控制器中而不是在 jsp 中进行验证...... JSP 编译的开销是谋杀而不增加解析输入的开销。我要给你的另一个警告是,如果你注意到 esapi 文档,调用 isValidInput() 会忽略绝对关键的规范化。你会想改用getValidInput()。如果您觉得需要使用isValidInput(),那么您需要确保手动调用canonicalize(),这是Encoder 类中的一个方法。另外,请注意这一行:

    var isValidURL = ESAPI.validator().isValidInput("URLContext", userURL, "URL", 255, false); 
    

    在 ESAPI 不是JavaScript 库中犯了一个严重错误。此调用应如下所示:

    var isValidURL = <% ESAPI.validator().isValidInput("URLContext", userURL, "URL", 255, false); %>
    

    通常,如上所述,您希望在将使用此 jsp 作为输入的控制器上进行此验证,而不是在 jsp 本身上。 (Scriptlet 很慢,应该避免使用。)

    【讨论】:

    • 我添加了导入语句 - 谢谢 - 但我仍然遇到同样的错误。因为安装说明不清楚(关于分配哪个 JRE 的 VM 参数,其中我随意分配给 WebSphere Application Server v7.0 JRE),我也尝试在 Admin Console > Application Servers > 中设置通用 VM 参数(我的服务器) > Java 和进程管理 > 进程定义 > Java 虚拟机。这也没什么区别。我尝试在 server.xml 中添加 systemproperties 以指向两个 .properties 文件 - 仍然无法正常工作。想法?
    • 您是否收到堆栈跟踪或浏览器错误?如果它是堆栈跟踪,请将其添加到问题中。如果它来自浏览器,请将您的分配修改为isValidURL
    • avgvstvs - 您的更正确实解决了我报告的问题 - 谢谢。现在我有一个新问题。 ESAPI.properties 已找到,但出现“在应用程序 (myapp)EAR 中的 servlet /WEB-INF/tiles-components/frm/main.jsp 的服务方法之一中创建的未捕获异常。创建的异常:com.ibm.websphere .servlet.error.ServletErrorReport:java.lang.NoClassDefFoundError:org.apache.commons.fileupload.ProgressListener”。我确实下载并添加了 org.apache.commons.fileupload.jar 到我 EAR 的依赖项中,但这并没有解决它。缺少什么?
    • 您想要的确切库在这里:mvnrepository.com/artifact/commons-fileupload/…
    • 我会确保该库实际上已进入服务器的类路径。如果您使用的是 maven/gradle,您可能需要在构建之前运行“清理”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-09
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多