You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用MockMvc验证响应Location头中的重定向URL参数

问题:验证MockMvc重定向Location头中的所有URL参数

我正在使用MockMvc测试一个端点,该端点会执行重定向操作,因此响应头的Location字段中会包含一个带多个参数的URL,示例如下:

https://platform:8080/auth?scope=openid&response_type=id_token&response_mode=form_post&prompt=none&client_id=toolid&redirect_uri=https://localhost:8080/tool/token/receiver&login_hint=loginHint&state=1d73c90f-fe03-47dc-9e28-ed416fad7773&nonce=7b5e7240-161e-4d78-8e32-54923c9ce04a

我需要验证这个URL里的9个参数全部存在。我最初尝试的代码如下:

mockMvc.perform(get(OIDC_INIT_FLOW_ENDPOINT)
                .contentType(MediaType.APPLICATION_FORM_URLENCODED)
                .params(initFlowRequestParams))
        .andExpect(status().isFound())
        .andExpect(header().exists(LOCATION))
        .andExpect(header().string(LOCATION, contains("openId")));

这段代码的最后一个andExpect断言无法正常工作,但能体现我的需求,请问该如何实现目标?


解决方案

在Chris的帮助下,我找到了可行的实现方案:

mockMvc.perform(get(OIDC_INIT_FLOW_ENDPOINT).contentType(MediaType.APPLICATION_FORM_URLENCODED).params(initFlowRequestParams))
                .andExpect(status().isFound())
                .andExpect(header().exists(LOCATION))
                .andExpect(header().string(LOCATION,
                        Matchers.allOf(containsString("scope"), containsString("response_type"), containsString("response_mode"),
                                containsString("prompt"), containsString("client_id"), containsString("redirect_uri"), containsString("login_hint"),
                                containsString("state"), containsString("nonce"))));

注:原解决方案代码中重复写了一次containsString("response_type"),已修正为response_mode,确保覆盖全部9个参数

内容的提问来源于stack exchange,提问作者Edgar Hernandez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 10:05:15