您發佈的「異常」實際上是兩個不同的項目:(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。
你還有這個問題嗎? – avgvstvs