Apache Wicket 9.1 CSRF 启用,FormTester 提交被资源隔离策略阻止

Kar*_*ila 0 wicket

我刚刚通过在 WicketApplication 中设置以下行作为文档指南,将 CSRF 启用到我们的 Wicket 9.1 应用程序中:

getRequestCycleListeners().add(new ResourceIsolationRequestCycleListener());
Run Code Online (Sandbox Code Playgroud)

保护本身似乎有效,但它破坏了我们的 UI 测试。通过 FormTester 提交表单时(请参阅下面的示例),我收到异常“请求被资源隔离策略阻止”。

        WicketApplication app = new WicketApplication(someparams);
        WicketTester tester = new WicketTester(app);
        FormTester form = tester.newFormTester("form");
        ...
        form.submit();
Run Code Online (Sandbox Code Playgroud)

我需要向 WicketTester 或 FormTester 添加一些配置吗?我在 Wicket 9.1 文档中没有看到任何与测试人员和 CSRF 相关的内容。

小智 5

您应该在提交或单击测试中的链接之前添加适当的请求标头,以便 CSRF 保护允许通过模拟请求:

tester.addRequestHeader(SEC_FETCH_SITE_HEADER, SAME_SITE);
form.submit();
Run Code Online (Sandbox Code Playgroud)

上面的片段中使用的两个常量是 FetchMetadataResourceIsolationPolicy 类中的静态字段。我将在用户指南中添加一段内容来提供此信息。