获取Dropwizard集成测试的SecurityContext

时间:2017-11-14 12:03:01

标签: java rest session integration-testing dropwizard

我正在为我的Dropwizard应用程序编写集成测试来测试REST服务。 我的应用程序使用cookie进行基本身份验证。

所以我创建了ClassRule:

@ClassRule public static final DropwizardAppRule<RESTServerConfiguration> RULE = new DropwizardAppRule<>(RESTServer.class, ResourceHelpers.resourceFilePath("serverconfig.yml"));

当我测试login方法时:

final Response response = RULE.client().target("http://localhost:" + RULE.getLocalPort() + "/api/users/login") .request(MediaType.APPLICATION_JSON) .post(Entity.json("{\"username\": \"admin\", \"password\": \"admin\"}")); 一切正常。

但是当我尝试测试受保护的资源时,例如:

final TestResponse response = RULE.client().target("http://localhost:" + RULE.getLocalPort() + "/api/users/getAllUsers") .request() .get(TestResponse.class);

它因401错误而失败。

如何获取SecurityContext或将会话存储在某个地方?

1 个答案:

答案 0 :(得分:1)

我终于想出了这件事。

我需要做的就是从login请求中提取Cookie,例如:

`

String cookieValue = null;
for (Map.Entry<String, NewCookie> entry : loginResponse.getCookies().entrySet()) {
    String key = entry.getKey();
    if ("sessionToken".equals(key)) {
        cookieValue = entry.getValue().toString();
        cookieValue = cookieValue.substring(0, cookieValue.indexOf(";"));
    }
}

`

然后将其设置为受保护资源请求的标头,例如:

.header(&#34; Cookie&#34;,cookieValue)