java - 我应该在哪里找到一个耳朵内多次 war 使用的通用 ESAPI.properties 文件?

标签 java configuration ear esapi

我有两个模块将使用具有相同属性文件(ESAPI 和 validation.properties)的 ESAPI。

这些模块输出到包含在耳朵中的 war 。

我在其中一个 war 文件中有属性文件,在服务器启动时可以在其中找到它们。另一个 war 文件似乎工作正常并且不会提示它无法在日志中找到属性文件。

我正在使用 ESAPI 来清理 html 和 url 参数 - 我想知道我是否需要这些属性文件才能被第二个模块访问,或者任何一个,因为没有配置并且一切都使用默认值完成。

最佳答案

首先,让我描述一下 ESAPI 2.x 如何找到它的 ESAPI.properties 文件。

ESAPI的SecurityConfiguration接口(interface)的引用实现类是

org.owasp.esapi.reference.DefaultSecurityConfiguration

使用此默认实现,ESAPI.propertiesValidation.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的“ca​​talina”脚本中,可以将JAVA_OPTS变量设置为上面的'-D'字符串。

3)里面

System.getProperty( "user.home" ) + "/.esapi"

目录(支持向后兼容)或在

System.getProperty( "user.home" ) + "/esapi"

4) 在类路径上遇到的第一个“.esapi”或“esapi”目录。请注意,由于 Java 使用多个类加载器,并且如果您在给定的应用程序服务器中有多个应用程序,它们可能使用不同的类路径,因此这可能会变得复杂。因此,通常不推荐使用此选项,但出于与早期 ESAPI 1.4.x 版本向后兼容的原因提供了此选项。

一旦 ESAPI 找到它可以读取的有效属性文件(例如 ESAPI.properties),它就会停止搜索其他文件。

现在,就是说,如果您想在所有 .war 文件中共享一个 ESAPI.properties 文件,我建议您使用选项 #2 并设置 System 属性“org.owasp.esapi.resources"到一些它们都可以访问的公共(public)安全目录。此外,您应该使用完整路径名。

关于java - 我应该在哪里找到一个耳朵内多次 war 使用的通用 ESAPI.properties 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39131026/

相关文章:

java - 计算数组列表中的素数

android 错误或配置对象的误用?

java - Maven:让 SkinnyWars 保留一些库

java - Maven EAR 项目分发用于多个应用程序服务器?

Apache Config - 排除子目录

Gradle EAR 与来自其他项目的传递库

java - 在添加到集合之前过滤对象的最简洁方法?

java - 为多部分实体设置编码

java - 具有上限的通配符类型变量的迭代器

recursion - VHDL 递归组件/实体