Spring Security登录成功后下载文件而非跳转首页问题排查
问题原因分析
触发文件下载的核心原因是**/、/home路径对应的响应Content-Type被识别为二进制流(application/octet-stream)**,浏览器识别到该响应头就会触发下载动作而非渲染页面,结合你给出的配置和测试现象,大概率是以下两种原因导致:
1. 静态资源目录存在同名无后缀文件
Spring Boot 中静态资源映射优先级高于Controller接口映射,你的安全配置里已经放行所有静态资源访问:
requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll()
如果resources/static、resources/public等静态资源目录下存在名为index(对应根路径/的默认欢迎页匹配规则)、home的无后缀文件,Spring会直接将其作为二进制静态资源返回,不会走到你写的Controller逻辑,就会触发下载。
而/users/register路径没有对应的同名静态资源,会正常走Controller返回HTML页面,所以跳转正常。
2. 对应路径的Controller方法配置错误
如果排查静态资源没有问题,那就是/、/home对应的Controller接口配置有误:
- 方法上误加了
@ResponseBody注解,或者类上用了@RestController,导致本应返回的视图名被当成普通字符串序列化返回,Content-Type被识别为二进制流 - 接口显式设置了
produces = "application/octet-stream",强制返回二进制类型
排查验证步骤
- 打开浏览器F12开发人员工具的「网络」标签,复现登录流程,查看跳转后的请求响应头,确认
Content-Type字段值是否为application/octet-stream - 检查静态资源目录下是否存在无后缀的
index、home文件,将对应文件删除或补充.html后缀即可 - 检查
/、/home对应的Controller注解,移除误加的@ResponseBody,类上改用@Controller注解
内容的提问来源于stack exchange,提问作者Dimitar Dimitrov
相关产品推荐
相关产品推荐

