我应该在哪里找到一个耳朵内多次战争使用的公共 ESAPI.properties 文件?
where should I locate a common ESAPI.properties file used by multiple wars inside an ear?
我有两个模块将使用具有相同属性文件的 ESAPI(ESAPI 和 validation.properties)。
这些模块输出到包含在耳朵中的 war 个。
我在 war 文件之一中有属性文件,在服务器启动时可以在其中找到它们。另一个 war 文件似乎工作正常并且不会抱怨它在日志中找不到属性文件。
我正在使用 ESAPI 来清理 html 和 url 参数 - 我想知道我是否需要这些 属性 文件才能被第二个模块或其中任何一个模块访问没有配置,一切都使用默认设置完成。
答案是将包含属性文件的 esapi 目录放在
src/main/application
在其中一个模块中。此路径将其内容放在耳朵的根部。
首先,让我描述一下 ESAPI 2.x 如何找到它的 ESAPI.properties 文件。
ESAPI SecurityConfiguration
接口的参考实现 class 是
org.owasp.esapi.reference.DefaultSecurityConfiguration
使用此默认实现,ESAPI.properties
和
Validation.properties
可以放在几个位置,按以下顺序查找:
1) 在调用 SecurityConfiguration.setResourceDirectory()
的目录集内。例如,
ESAPI.securityConfiguration().setResourceDirectory("C:\myApp\resources");
当然,如果您使用此技术,则必须在使用 ESAPI.properties(其中大部分)进行任何其他 ESAPI 调用之前完成。
2) 在系统属性“org.owasp.esapi.resources
”定义的目录中。您可以在 java
命令行上设置如下(例如):
java -Dorg.owasp.esapi.resources="C:\temp\resources" ...
您可能必须将此添加到启动您的网络服务器的启动脚本中。例如,对于Tomcat,在Tomcat开始的"catalina"脚本中,可以将JAVA_OPTS变量设置为上面的'-D'字符串。
3) 在
里面
System.getProperty( "user.home" ) + "/.esapi"
目录(支持向后ward 兼容)或在
System.getProperty( "user.home" ) + "/esapi"
4) 在 class 路径上遇到的第一个“.esapi
”或“esapi
”目录。请注意,由于 Java 使用多个 class 加载程序,并且如果您在给定应用程序服务器中有多个应用程序,它们可能使用不同的 class 路径,这可能会变得复杂。出于这个原因,通常不推荐使用此选项,但出于与早期 ESAPI 1.4.x 版本ward 兼容的原因,提供了此选项。
一旦 ESAPI 找到它可以读取的有效 属性 文件(例如,ESAPI.properties),它就会停止搜索其他文件。
也就是说,如果您想在所有 .war 文件中共享一个 ESAPI.properties 文件,我建议您使用选项 #2 并设置 System
属性 "org.owasp.esapi.resources
" 到他们都可以访问的一些公共安全目录。此外,您应该使用完整路径名。
我 运行 ESAPI 在 java 1.8.0_71 的 Maven 项目上。我把 ESAPI.properties 和 validation.properties 放在
src/main/resources
这对我有用:
正在尝试通过 class 路径加载 ESAPI.properties。
使用当前线程上下文 class 加载程序通过 CLASSPATH 从 '/ (root)' 成功加载 ESAPI.properties!
正在尝试通过 class 路径加载 validation.properties。
使用当前线程上下文 class 加载程序通过 CLASSPATH 从 '/ (root)' 成功加载 validation.properties!
我有两个模块将使用具有相同属性文件的 ESAPI(ESAPI 和 validation.properties)。
这些模块输出到包含在耳朵中的 war 个。
我在 war 文件之一中有属性文件,在服务器启动时可以在其中找到它们。另一个 war 文件似乎工作正常并且不会抱怨它在日志中找不到属性文件。
我正在使用 ESAPI 来清理 html 和 url 参数 - 我想知道我是否需要这些 属性 文件才能被第二个模块或其中任何一个模块访问没有配置,一切都使用默认设置完成。
答案是将包含属性文件的 esapi 目录放在
src/main/application
在其中一个模块中。此路径将其内容放在耳朵的根部。
首先,让我描述一下 ESAPI 2.x 如何找到它的 ESAPI.properties 文件。
ESAPI SecurityConfiguration
接口的参考实现 class 是
org.owasp.esapi.reference.DefaultSecurityConfiguration
使用此默认实现,ESAPI.properties
和
Validation.properties
可以放在几个位置,按以下顺序查找:
1) 在调用 SecurityConfiguration.setResourceDirectory()
的目录集内。例如,
ESAPI.securityConfiguration().setResourceDirectory("C:\myApp\resources");
当然,如果您使用此技术,则必须在使用 ESAPI.properties(其中大部分)进行任何其他 ESAPI 调用之前完成。
2) 在系统属性“org.owasp.esapi.resources
”定义的目录中。您可以在 java
命令行上设置如下(例如):
java -Dorg.owasp.esapi.resources="C:\temp\resources" ...
您可能必须将此添加到启动您的网络服务器的启动脚本中。例如,对于Tomcat,在Tomcat开始的"catalina"脚本中,可以将JAVA_OPTS变量设置为上面的'-D'字符串。
3) 在
里面
System.getProperty( "user.home" ) + "/.esapi"
目录(支持向后ward 兼容)或在
System.getProperty( "user.home" ) + "/esapi"
4) 在 class 路径上遇到的第一个“.esapi
”或“esapi
”目录。请注意,由于 Java 使用多个 class 加载程序,并且如果您在给定应用程序服务器中有多个应用程序,它们可能使用不同的 class 路径,这可能会变得复杂。出于这个原因,通常不推荐使用此选项,但出于与早期 ESAPI 1.4.x 版本ward 兼容的原因,提供了此选项。
一旦 ESAPI 找到它可以读取的有效 属性 文件(例如,ESAPI.properties),它就会停止搜索其他文件。
也就是说,如果您想在所有 .war 文件中共享一个 ESAPI.properties 文件,我建议您使用选项 #2 并设置 System
属性 "org.owasp.esapi.resources
" 到他们都可以访问的一些公共安全目录。此外,您应该使用完整路径名。
我 运行 ESAPI 在 java 1.8.0_71 的 Maven 项目上。我把 ESAPI.properties 和 validation.properties 放在
src/main/resources
这对我有用:
正在尝试通过 class 路径加载 ESAPI.properties。 使用当前线程上下文 class 加载程序通过 CLASSPATH 从 '/ (root)' 成功加载 ESAPI.properties!
正在尝试通过 class 路径加载 validation.properties。 使用当前线程上下文 class 加载程序通过 CLASSPATH 从 '/ (root)' 成功加载 validation.properties!