Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在esapi中创建自定义用户_Java_Esapi - Fatal编程技术网

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

Java 如何在esapi中创建自定义用户,java,esapi,Java,Esapi,如何创建包含其他属性的自己的用户类? 我试图通过实现org.owasp.esapi.user接口来创建自己的用户类,并添加了一些额外的属性 public class MyUserClass implements User{ 然后我试了这个 MyUserClass userClass=(MyUserClass) ESAPI.authenticator().getCurrentUser(); 但有一个例外: SecurityConfiguration for Logger.LogEncoding

如何创建包含其他属性的自己的用户类? 我试图通过实现
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)日志消息,和(2)实际异常。虽然这些项目完全不同,但它们仍然源于同一个根本问题

简短回答:当应用程序初始化时,您忘记设置安全配置系统属性。它应该如下所示:

System.setProperty("org.owasp.esapi.SecurityConfiguration",
    "org.you.yourapp.YourAppSecurityConfiguration");
其中,
org.you.yourapp.YourAppSecurityConfiguration
是将要编写并实现的类的名称。由于无法设置此系统属性,因此在运行以下代码时:

private static String securityConfigurationImplName =   
    System.getProperty("org.owasp.esapi.SecurityConfiguration", 
    "org.owasp.esapi.reference.DefaultSecurityConfiguration");
…然后,由于您从未设置属性,ESAPI正在为您选择

当此
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的安全配置。使用默认值:false

您的第二个问题也是ESAPI为您选择
DefaultSecurityConfiguration
的结果。此默认配置有一个返回的实例的方法。正如javadoc链接所解释的,在运行时类路径上需要有一个
users.txt
文件,其中包含关于用户的所有序列化信息。当然,
FileBasedAuthenticator
会返回实例,这就是为什么会出现第二个问题(这是一个实际的例外):

java.lang.ClassCastException:org.owasp.esapi.reference.DefaultUser不能强制转换为com.bean.MyUserClass

因为您无法将
DefaultUser
(从
FileBasedAuthenticator
)强制转换为您自己的
MyUser


困惑?真的没那么糟。只需实现您自己的
SecurityConfiguration
并将其设置为系统属性,您就可以完成所有设置。HTH.

我看到设置安全配置属性是在中设置的。这可能会让我听起来很愚蠢,但是我应该把语句
System.setProperty(“org.owasp.esapi.SecurityConfiguration”,“org.me.myapp.MyAppSecurityConfiguration”)放在哪里呢?您仍然存在此问题吗?