gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 06:34:48 34 4
gpt4 key购买 nike

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

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 是您将编写的实现 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 值。因此,如果您希望第一条消息消失,您需要类似以下内容:

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

这解决了您的第一个问题:

SecurityConfiguration for Logger.LogEncodingRequired not found in ESAPI.properties. Using default: false

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

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

因为您无法将 DefaultUser(从 FileBasedAuthenticator 传回)转换为您自己的 MyUser 类。

感到困惑吗?确实没那么糟糕。只需实现您自己的 SecurityConfiguration 并将其设置为系统属性,就可以了。 HTH。

关于java - 如何在esapi中创建自定义用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19765494/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com