0

我正在使用播放!v1.2.6和安全模块。

我想测试我的一些控制器,所以我写了一个FunctionalTest. 我担心我的应用程序中的任何页面都是安全的,因此用户(或测试类)必须先登录。我在SO上看到了一个类似的问题,所以我写了以下代码:

public class ApplicationTest extends FunctionalTest {

    // Simulate a login and create a new request...
    public Request createAuthenticatedRequest(String url) {
        Map<String, String> loginInfo = new HashMap<String, String>();
        loginInfo.put("username", "test-user");
        loginInfo.put("password", "test-password");
        Response loginResponse = POST("/login", loginInfo);

        Request request = newRequest();
        request.cookies = loginResponse.cookies;
        request.url = url;
        return request;
    }

    @Test
    public void test_summary_page() {
        Request request = createAuthenticatedRequest("/summary");
        Response response = makeRequest(request);

        System.out.println("==================");
        System.out.println("Content: '" + getContent(response) + "'");
        System.out.println("------------------");
        System.out.println(" > " + response.headers.get("Location") + " ; " + response.status);
        System.out.println("==================");

        assertIsOk(response);
        assertContentMatch("Summary page", response);
        assertContentType("text/html", response);
        assertCharset(play.Play.defaultWebEncoding, response);
    }

但是,这是行不通的。测试方法的输出如下:

==================
Content: ''
------------------
 > [/login] ; 302
==================

这意味着请求被重定向(HTTP 代码302)到登录页面,就像用户没有登录一样。

另外,在我的 Secure 类中,我在方法中添加了一条日志消息,boolean authenticate(String username, String password)以查看是否确实有身份验证尝试,运行FunctionalTest.

我做错了什么?如何解决我的问题?

谢谢。

4

1 回答 1

0

我终于找到了答案,当然,这是我代码中的一个愚蠢的错误。实际上,我将请求发布到 URL /login,而不是发布到/secure/authenticate.

因此正确的代码是:

public Request createAuthenticatedRequest(String url) {
    Map<String, String> loginInfo = new HashMap<String, String>();
    loginInfo.put("username", "test-user");
    loginInfo.put("password", "test-password");
    Response loginResponse = POST("/secure/authenticate", loginInfo);
    Request request = newRequest();
    request.cookies = loginResponse.cookies;
    request.url = url;
    return request;
}
于 2013-09-04T07:29:15.787 回答