引言
今天在做springboot2+oauth2整合的时候遇到一个很头痛的问题。ajax跨域发送options请求,服务器401问题。
开发环境
前端:axios.js 端口:8081
后端:springboot2+oauth2 端口8080
问题描述
1,在搭建好服务器的oauth认证服务后,用postman测试结果都ok。
2,然后,在前端用以下代码测试。
报错如下:
因为是前后分离的环境,因此存在这跨域的问题,每次客户端的任何请求,都会先发送一个options请求,但是此时服务器可能不允许options请求方式,因此,服务器直接报401,意思是未授权。
解决思路
1,检查请求参数以及请求头对不对,经过检查绝对正确。
2,因为之前做过spring+security+oauth2,所以猜测这可能是跨域导致的问题。因此以为和以前一样,给整个应用加一个corsfilter就可以了。
结果,万万没有想到的是,加上了还是401,根本没有经过此过滤器。
所以,接下来要做的事情是,需要在执行spring secruity 过滤器链之前就要执行我们的corsfilter,否则加上了也没用。
最终解决
在corsfilter上,加上注解spring boot提供的注解@Order(Ordered.HIGHEST_PRECEDENCE),意思是最优先执行。
好了,这样就可以保证,最先执行我们的corsfilter了。