2013-11-04 52 views
0

如何創建自己的具有其他屬性的用戶類? 我試圖通過實現org.owasp.esapi.User接口創建我自己的用戶類,並添加了一些額外的屬性。如何在esapi中創建自定義用戶

public class MyUserClass implements User{ 

那麼我想這

MyUserClass userClass=(MyUserClass) ESAPI.authenticator().getCurrentUser(); 

但得到這個異常:

SecurityConfiguration for Logger.LogEncodingRequired not found in ESAPI.properties. Using default: false 
java.lang.ClassCastException: org.owasp.esapi.reference.DefaultUser cannot be cast to com.bean.MyUserClass 

我也試圖擴大DefaultUser類,但錯誤是一樣的。

+0

你還有這個問題嗎? – avgvstvs

回答

2

您發佈的「異常」實際上是兩個不同的項目:(1)日誌消息和(2)實際異常。雖然這些都是不同的項目,但它們仍然源自同一個潛在問題。

簡短回答:當您的應用初始化時,您忘記了設置您的安全配置系統屬性。它應該是這個樣子:

System.setProperty("org.owasp.esapi.SecurityConfiguration", 
    "org.you.yourapp.YourAppSecurityConfiguration"); 

org.you.yourapp.YourAppSecurityConfiguration是一類的,你會寫這個名字實現SecurityConfiguration。因爲你沒有設置此係統屬性,當以下ESAPI代碼運行:

private static String securityConfigurationImplName = 
    System.getProperty("org.owasp.esapi.SecurityConfiguration", 
    "org.owasp.esapi.reference.DefaultSecurityConfiguration"); 

...然後,因爲你從來沒有設置該屬性,ESAPI是選擇DefaultSecurityConfiguration你。

當此DefaultSecurityConfiguration去初始化ESAPI的內部記錄系統,下面的方法被稱爲:

protected String getESAPIProperty(String key, String def) { 
    String value = properties.getProperty(key); 
    if (value == null) { 
     logSpecial("SecurityConfiguration for " + key + " not found in ESAPI.properties. Using default: " + def, null); 
     return def; 
    } 

    return value; 
} 

它在這裏尋找的屬性是一個叫Logger.LogEncodingRequired布爾值。所以,如果你想要這個第一條消息去的時候,你需要的東西,如:

boolean logEncodingRequired = true; // or false, your choice 
System.setProperty("Logger.LogEncodingRequired", logEncodingRequired); 

這需要照顧你的第一個問題:

SecurityConfiguration爲Logger.LogEncodingRequired在ESAPI.properties沒有找到。使用默認值:false

您的第二個問題也是ESAPI爲您選擇DefaultSecurityConfiguration的結果。該默認配置有一個authenticator()方法,該方法返回FileBasedAuthenticator的實例。正如javadoc鏈接所解釋的那樣,您需要在運行時類路徑上包含一個users.txt文件,其中包含有關用戶的所有序列化信息。而且,當然,在FileBasedAuthenticator返回這就是爲什麼你得到第2期(這是一個實際的除外)DefaultUser實例:

java.lang.ClassCastException: org.owasp.esapi.reference.DefaultUser cannot be cast to com.bean.MyUserClass

因爲你不能投的DefaultUser(通過從FileBasedAuthenticator回)到自己的MyUser類。

困惑?這真的不是很糟糕。只需實施您自己的SecurityConfiguration並將其設置爲系統屬性,並且您將全部設置。 HTH。

+0

我看到在[ESAPI.java]中設置了安全配置屬性(http://code.google.com/p/owasp-esapi-java/source/browse/trunk/src/main/java/org /owasp/esapi/ESAPI.java)**。這可能讓我聽起來很愚蠢,但我應該在哪裏發表聲明 'System.setProperty(「org.owasp.esapi.SecurityConfiguration」, 「org.me.myapp.MyAppSecurityConfiguration」);'? –

相關問題