0

如何创建自己的用户类,其中包含其他属性?我尝试通过实现接口来创建自己的用户类org.owasp.esapi.User并添加了一些额外的属性。

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 类,但错误是一样的。

4

1 回答 1

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);

这可以解决您的第一个问题:

在 ESAPI.properties 中找不到 Logger.LogEncodingRequired 的 SecurityConfiguration。使用默认值:false

您的第二个问题也是 ESAPIDefaultSecurityConfiguration为您选择的结果。这个默认配置有一个authenticator()方法,它返回一个FileBasedAuthenticator. 正如该 javadoc 链接所解释的,您需要users.txt在运行时类路径中有一个文件,其中包含有关您的用户的所有序列化信息。而且,当然,FileBasedAuthenticator返回实例DefaultUser就是您遇到第二个问题的原因(这是一个实际的例外):

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

因为您不能将DefaultUser(从 传回FileBasedAuthenticator)转换为您自己的MyUser班级。

使困惑?这真的不是那么糟糕。只需实现您自己的SecurityConfiguration并将其设置为系统属性,您将一切就绪。HTH。

于 2013-11-25T19:49:24.987 回答