Play!框架1.2.5:如何测试响应是否安全?

3
我的联系表单页面的一个测试用例是确保它始终在安全上下文中使用SSL。基本上,我想知道的是,我有一个给定的请求,其中request.secure = true; 以下响应不包含任何关于此的信息,其头为空:
@Test
public void shouldShowContactForm() {
    Response response = GET("/contact");
    // How can I ask the response, if the complete URL is in HTTPS?
}

即使我明确设置了自己的请求,我也找不到正确的方法来实现这一点:

@Test
public void shouldShowContactFormInSSLContext() {
    Request request = newRequest();
    request.secure = true;
    Response response = GET(request, "/contact");
    // Is it now possible?
}

这是否是测试的正确方法,或者我错过了请求/响应方面的重要内容?

1个回答

2

对于这个问题,我认为我过去为我的应用程序所做的是在所有控制器上都有一个类似于以下内容的@before拦截器。

     @Before
     static void checkSSL(){
         if(Play.mode.equals(Play.Mode.PROD)){
             if(!request.secure) {
                 Router.ActionDefinition cashTicketDefinition = Router.reverse(request.controller + "." + request.actionMethod);
                 cashTicketDefinition.absolute();
                 String url = cashTicketDefinition.url.replaceFirst( "http:", "https:");

                 redirect(url, true);
        }
    }
}

这正是问题所在,没有'response.secure'字段。从响应中获取此信息的唯一方法是查看位置的标头,如果以“https”开头。但是,简单GET调用的标头为空。 - crasp
@crasp - 我认为你想要做的就是强制每个请求都是安全的。我编辑了我的帖子以进行演示。 - rhmiller_ic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接