2014-05-15 69 views
0

已遵循Eclipse的esapi4java-core-2.0-install-guide.pdf並將其應用於Websphere 7.5環境中。Websphere 7中未定義'esapi'

第1步 - 我在庫中添加了esapi.jar(項目>屬性> Java構建路徑>庫選項卡>添加外部JAR)。

第2步 - 我找到esapi &驗證.properties文件在我機器上的一個文件夾中。

第3步 - 我選擇爲所有運行配置添加esapi(Windows>首選項> Java>已安裝的JRE)。我突出顯示了WebSphere Application Server v7.0 JRE,選擇了「編輯」並將esapi.jar添加到該庫列表。在相同的表單上,我將缺省虛擬機參數提示符-Dorg.owasp.esapi.resources =「/ path/to/.esapi」參數添加到了我的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語句)。

我錯過了什麼?

回答

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本身的控制器上此驗證。 (Scriptlets很慢,應該避免。)

+0

我添加了導入語句 - 謝謝 - 但仍然收到相同的錯誤。由於安裝說明並不清楚(關於分配VM參數的哪個JRE,我將其任意分配給WebSphere Application Server v7.0 JRE),因此我還嘗試在管理控制檯>應用程序服務器>(我的服務器)中設置通用VM參數)> Java和進程管理>進程定義> Java虛擬機。這也沒有區別。我嘗試在server.xml中添加systemproperties以指向兩個.properties文件 - 仍然不起作用。想法? – Mark

+0

您是否收到堆棧跟蹤或瀏覽器錯誤?如果它的堆棧跟蹤,將其添加到問題。如果它來自瀏覽器,請將您的任務修改爲'isValidURL' – avgvstvs

+0

avgvstvs - 您的更正確實解決了我報告的問題 - 謝謝。現在我有一個新的概率。 ESAPI.properties被找到,但我得到了「在servlet/WEB-INF/tiles-components/frm/main的服務方法之一中創建的未捕獲異常。應用程序(myapp)EAR中的jsp。創建的異常:com.ibm.websphere.servlet.error.ServletErrorReport:java.lang.NoClassDefFoundError:org.apache.commons.fileupload.ProgressListener「。我沒有下載並添加org.apache.commons.fileupload.jar到我的EAR的依賴但沒有解決它。什麼是缺少的? – Mark