问题描述:在原本的项目中加入shiro来控制访问权限,结果之前还能请求的接口,加入了shiro之后就请求不到数据了,控制台报了 Uncaught (in promise) Error: Request failed with status code 400。

问题分析过程:400这个状态码一般是后端解析参数的时候出现了错误,我首先在浏览器中打开控制台,在网络中查看我发起的请求,可以看到我的请求是发送出去了的。

同时在后端我请求的接口处打上了断点。毫无疑问,没有进去这个请求。

前端请求发出了,后端使用Restful接受参数,参数个数也没问题,关键是之前还好好的,突然就报错了。

然后想了下,这个问题是在集成了shiro之后才报的错,而shiro本质是使用拦截器+过滤器来实现的,会不会是它在拦截请求的时候出了问题,有了思路,就去查了下shiro报错这方面的资料。

查了发现,问题还真出现在shiro身上(也是我的问题,url请求中存在中文字符),我用的shiro是1.9版本的,这个版本不支持url中有中文字符,不然会报错,无奈之下我就只好降版本了,测试1.6版本是支持url中出现中文字符的。

解决方法:最后我是通过降版本的方式来处理的问题,这确实有效。不过规范的做法还是应该修改接口,不让请求的url中存在中文字符,尽量使用字符和数字,或者使用POST请求一锅烩。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐