【问题标题】:Play Framework csrf token generation in unit test在单元测试中播放框架 csrf 令牌生成
【发布时间】:2017-09-21 01:43:55
【问题描述】:

由于“[RuntimeException: Missing CSRF Token]”,我有两个单元测试失败:

running(testServer(3333, provideFakeApplication()), () -> {
    assertThat(WS.url("http://localhost:3333").get().get(3000).getStatus()
                ).isEqualTo(OK);

running(testServer(3333, provideFakeApplication()), HTMLUNIT, browser -> {
    browser.goTo("http://localhost:3333");
    assert....

如何将带有 CSRF 令牌的会话添加到 WS.url 和 browser.goTo?

测试正在尝试访问具有表单的页面。

【问题讨论】:

标签: junit playframework csrf


【解决方案1】:

全局解决方案是使用启用了 CSRF 过滤器的虚假应用程序。为此,您需要修改(即创建一个继承自 WithApplication 的类并覆盖)您的 provideFakeApplication(),例如它会创建传入全局设置的假应用程序:

public abstract class TestWrapper extends WithApplication {
    public class GlobalTestSettings extends play.GlobalSettings {
        @Override
        public <T extends EssentialFilter> Class<T>[] filters() {
            return new Class[] { CSRFFilter.class };
        }
    }

    @Override
    protected FakeApplication provideFakeApplication() {
        stop(fakeApplication()); // Stop the existing fake app and start over
        Map<String, String> addConfig = new HashMap<>();
        return fakeApplication(addConfig, new GlobalTestSettings());
    }
}

【讨论】:

  • 哇。惊人的!另外,有了这个,我也不需要处理虚假请求的 withSession(...) 。
猜你喜欢
  • 1970-01-01
  • 2017-03-08
  • 1970-01-01
  • 2010-12-20
  • 1970-01-01
  • 1970-01-01
  • 2014-08-20
  • 2014-01-21
  • 1970-01-01
相关资源
最近更新 更多