问题描述: 在昨天敲代码的过程中就出现了明明设置了token,但是在进行接口测试的时候还是出现jwt不能为空的情况,然后在拦截器将这个接口的路径放行也还是不行。
问题解决: 最终就是查阅了一些文章,然后发现可能是springboot默认的重定向问题,也就是说当一个客户端发出请求访问某个资源,当该资源不存在,springboot默认会重定向到/error路径。/error路径被拦截器拦截。(等于发送了两次请求,那么/error因为没有token,所以会被拦截)。
最后是决定采用直接将/error这个路径直接放行,这样子前端直接报404,而不是jwt为空,避免造成误导。
后面查阅资料发现在Spring MVC控制器类中,当使用@ResponseBody注解时,Spring会将方法的返回值直接写入HTTP响应体中。而如果不加上@ResponseBody注解Spring会尝试将方法作为视图解析,请求到达方法的时候,此时这个方法会被当作视图解析也就是再发送一次请求,找不到这个视图,重定向到/error也会执行一次。(也就是发送了三次请求)。不过这个项目因为没有配置视图解析器,所以也没有深究。