ATG(9.3)错误:java.lang.NoClassDefFoundError:org / owasp / html / HtmlPolicyBuilder

时间:2019-01-15 20:47:49

标签: atg atg-dynamo oracle-commerce atg-droplet

我正在尝试在ATG(9.3)应用程序中添加OWASP HTMLSanitizer API,但出现以下异常:

**** Error  Wed Jan 16 01:35:45 IST 2019    1547582745139   
/   Unable to resolve component /test/util/TestingUtil
java.lang.NoClassDefFoundError: org/owasp/html/HtmlPolicyBuilder

实施迄今所做的更改:

1)在我的Commerce / lib文件夹(所有jar所在的位置)中添加了owasp-java-html-sanitizer.jar和guava-20.0.jar

2)创建了CustomSanitizer组件,即CustomSanitizer.properties文件,其内容为:

$class=org.owasp.html.HtmlPolicyBuilder
$scope=global

3)将以上创建的组件添加到需要清理URL的现有组件中。现有组件属性文件(TestingUtil.properties)

$class=com.util.TestingUtil
htmlPolicyBuilder=/test/util/HTMLPolicyBuilder

4)TestingUtil.java:

private HtmlPolicyBuilder htmlPolicyBuilder;(setters and getters)

public String filterUrl(String url) {
        String filteredURL = url;
            PolicyFactory policy = htmlPolicyBuilder
                    .allowElements("a")
                    .allowUrlProtocols("https")
                    .allowAttributes("href").onElements("a")
                    .requireRelNofollowOnLinks()
                    .toFactory();
            filteredURL = policy.sanitize(url);
        }
        return filteredURL;

请提出建议。

1 个答案:

答案 0 :(得分:0)

首先,仅检查一下,因为从上面列出的实现更改中看不出来;您是否在模块清单中包括了新的JAR?在第1步和第2步之间。(查看您的错误,我怀疑是这种情况)

然后,您已定义的Nucleus组件(CustomSanitizer.properties),您可以单独实例化它吗?例如,如果您通过dyn/admin中的组件浏览器导航到该组件,将会得到什么? (它是全局的,它应该能够在首次访问时实例化它。)

然后,如果可以实例化该组件,请弄清楚为什么您的TestigUtil组件无法访问它。组件的路径正确吗?