springboot + shiro 下载文件时浏览器提示“无法下载-没有权限”或“无法下载-没有文件”问题
- 1. 预期效果
- 2. 问题描述
- 3. 问题排查
- 4. 解决方案
- 5. 总结
1. 预期效果
后端编写文件下载接口,前端通过浏览器的下载将文件保存到本地。
2. 问题描述
前后端代码在不同主机运行,后端使用 postman 测试下载接口可以正常下载文件,但在前端下载文件浏览器会提示“无法下载-没有权限”或“无法下载-没有文件”。
3. 问题排查
- 前端触发下载并没有进入后端下载接口的断点,猜测可能与后端使用的 shiro 框架有关。
- 在 shiro 框架中放行该请求的 url,前端即可正常下载文件,说明该问题与 shiro 有关。
- 在 shiro 框架的相关代码 debug 发现,当前端触发下载时,executeLogin 方法获取不到请求体的 token,所以前端的下载请求就被拦截返回了,没有进入后端的下载接口。
4. 解决方案
- 检查前端是否传了 token 信息?方式是什么样的?
- 检查 executeLogin 是如何获取 token 信息的?是否与前端的方式匹配?
5. 总结
本问题的关键点是 shiro 框架会对前端的请求进行身份验证,只要前端传了 token 等身份认证信息,后端再正常接收,前端的请求就可以正常进入到后端接口。