如何在esapi中创建自定义用户

时间:2013-11-04 10:11:00

标签: java esapi

如何创建自己的用户类,并在其中添加其他属性? 我尝试通过实现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类,但错误是相同的。

1 个答案:

答案 0 :(得分: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

您的第二个问题也是ESAPI为您选择DefaultSecurityConfiguration的结果。此默认配置具有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。