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

MockMvc执行GET请求不生成JSESSIONID Cookie的技术咨询

解决MockMvc测试时未生成JSESSIONID Cookie的问题

我之前也踩过这个坑,咱们一步步来排查解决:

核心原因分析

你手动添加AuthenticationFilter的方式跳过了Spring Security测试框架的自动配置逻辑,导致负责会话创建和管理的关键过滤器没有被正确加载,所以MockMvc不会自动生成JSESSIONID Cookie。另外也得检查你的安全配置里有没有禁用会话创建的策略。

推荐解决方案

1. 使用Spring Security官方测试配置器(最省心)

替换手动添加Filter的代码,改用springSecurity()配置器,它会自动帮你注册完整的Spring Security过滤器链,包括会话管理相关的逻辑:

import org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers;

@Before
public void initMocks(){
    this.mockMvc = MockMvcBuilders.webAppContextSetup(context)
        .apply(SecurityMockMvcConfigurers.springSecurity()) // 替代手动添加Filter的方式
        .build();
}

这样配置后,当请求触发会话需求时(比如认证流程),MockMvc会自动生成JSESSIONID Cookie并在响应中返回。

2. 手动强制创建会话(如果必须自定义Filter)

如果因为业务需求必须手动添加AuthenticationFilter,可以通过defaultRequest强制MockMvc初始化会话:

@Before
public void initMocks(){
    this.mockMvc = MockMvcBuilders.webAppContextSetup(context)
        .addFilter(new AuthenticationFilter(), "/*")
        // 通过添加占位符会话属性,强制MockMvc创建会话
        .defaultRequest(MockMvcRequestBuilders.get("/").sessionAttr("dummy-attr", "value"))
        .build();
}

这里的sessionAttr只是触发会话创建的占位符,你可以根据实际需求调整属性内容。

3. 检查安全配置的会话策略

打开你的WebSecurityConfig,确保没有设置成无状态会话模式,这种模式下Spring Security不会创建会话:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .sessionManagement()
            // 确保会话策略不是STATELESS,默认是IF_REQUIRED(需要时创建)
            .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED);
    // 其他安全配置...
}

如果设置了STATELESS,就不会生成JSESSIONID,改成IF_REQUIRED或者ALWAYS即可。

验证方法

你可以在测试方法里添加断言,检查响应中是否包含JSESSIONID Cookie:

@Test
public void testAuthenticationSession() throws Exception {
    mockMvc.perform(get("/your-test-endpoint"))
        .andExpect(status().isOk())
        .andExpect(cookie().exists("JSESSIONID"));
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:16:57