使用JMeter对Spring Boot Thymeleaf MVC应用压测时认证失败求助
解决JMeter压测Spring Boot MVC Basic认证失效问题
问题核心
你遇到的关键问题是:JMeter的HTTP Authorization Manager在Spring Boot MVC应用上未生效,返回登录页而非预期内容。对比httpbin能正常认证的情况,差异在于Spring Boot MVC默认的表单登录流程会直接重定向到登录页(返回3xx状态码),不会返回401 Unauthorized触发JMeter的被动认证机制,而REST服务如httpbin会返回401并携带WWW-Authenticate头,能正常触发JMeter的认证逻辑。
解决方案
1. 确认Spring Security启用Basic认证
首先检查你的Spring Security配置类,必须显式启用Basic认证支持,否则应用会默认走表单登录流程:
@Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .anyRequest().authenticated() .and() // 强制启用Basic认证 .httpBasic() .and() // 若需保留前端表单登录,可同时启用,但压测优先用Basic .formLogin(); } }
2. 让JMeter主动发送Authorization头
由于Spring Boot可能直接重定向,JMeter的Authorization Manager不会自动触发认证,需要手动添加请求头:
- 在HTTP请求采样器下添加HTTP Header Manager
- 添加头字段:
- 名称:
Authorization - 值:
Basic [Base64编码的用户名密码]
编码规则:将用户名:密码拼接后做Base64编码,比如你的11118:Aa@12345编码后为MTExMTg6QWFAMTIzNDU=,也可通过JMeter内置函数生成:${__base64Encode(11118:Aa@12345,)}
- 名称:
3. 调整JMeter重定向设置
暂时关闭HTTP请求的Follow Redirects选项:
- 如果返回
401 Unauthorized且带有WWW-Authenticate头,说明Basic认证配置正常,可重新开启重定向; - 如果仍重定向到登录页,说明Spring Security未正确启用Basic认证,回到步骤1检查配置。
4. 优化HTTP Authorization Manager配置(可选)
若坚持使用Authorization Manager,需修正两个配置点:
- Realm字段:填写Spring Security配置的Realm名称(默认是
Realm,可通过.httpBasic(realmName = "自定义Realm")设置) - URL匹配规则:改为更精确的路径,比如
http://10.14.4.49:9094/*,避免模糊匹配导致的规则不生效
验证方法
在JMeter的View Results Tree中查看:
- 请求头是否包含
Authorization字段,确认认证信息已发送; - 响应状态是否为200,且返回内容是预期页面,而非登录页。
内容的提问来源于stack exchange,提问作者Black Swan
相关产品推荐
相关产品推荐

