启用 Apache Wicket 9.1 CSRF,FormTester 提交被资源隔离策略阻止
Apache Wicket 9.1 CSRF enabled, FormTester submits blocked by resource isolation policy
我刚刚按照文档指南在我的 WicketApplication 中设置以下行,从而在我们的 Wicket 9.1 应用程序中启用了 CSRF:
getRequestCycleListeners().add(new ResourceIsolationRequestCycleListener());
保护本身似乎有效,但它破坏了我们的 UI 测试。通过 FormTester 提交表单时(参见下面的示例),出现异常“请求被资源隔离策略阻止”。
WicketApplication app = new WicketApplication(someparams);
WicketTester tester = new WicketTester(app);
FormTester form = tester.newFormTester("form");
...
form.submit();
我是否需要向我的 WicketTester 或 FormTester 添加一些配置?我在 Wicket 9.1 文档中没有看到任何与测试程序和 CSRF 相关的内容。
您应该在提交或单击测试中的 link 之前添加适当的请求 header,这样 CSRF 保护就会让模拟请求通过:
tester.addRequestHeader(SEC_FETCH_SITE_HEADER, SAME_SITE);
form.submit();
上面片段中使用的两个常量是来自class FetchMetadataResourceIsolationPolicy 的静态字段。我将在用户指南中添加一段以提供此信息。
我刚刚按照文档指南在我的 WicketApplication 中设置以下行,从而在我们的 Wicket 9.1 应用程序中启用了 CSRF:
getRequestCycleListeners().add(new ResourceIsolationRequestCycleListener());
保护本身似乎有效,但它破坏了我们的 UI 测试。通过 FormTester 提交表单时(参见下面的示例),出现异常“请求被资源隔离策略阻止”。
WicketApplication app = new WicketApplication(someparams);
WicketTester tester = new WicketTester(app);
FormTester form = tester.newFormTester("form");
...
form.submit();
我是否需要向我的 WicketTester 或 FormTester 添加一些配置?我在 Wicket 9.1 文档中没有看到任何与测试程序和 CSRF 相关的内容。
您应该在提交或单击测试中的 link 之前添加适当的请求 header,这样 CSRF 保护就会让模拟请求通过:
tester.addRequestHeader(SEC_FETCH_SITE_HEADER, SAME_SITE);
form.submit();
上面片段中使用的两个常量是来自class FetchMetadataResourceIsolationPolicy 的静态字段。我将在用户指南中添加一段以提供此信息。