声明:跨域的问题,前端和后端都能解决,CORS本身是在后端解决的,但是前端通过代理使请求变成不跨域也能解决,就看前端和后端开发人员的较量了。
问题:Spring Security提供的login接口访问不成功,OPTIONS预请求报错
报错信息:
Access to XMLHttpRequest at 'http://localhost:8080/sockjs-node/info?t=1565081611944' from origin 'http://xxxxx:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
分析:连调报的2个错误吗:401和404
401:Spring security识别不了,认为此请求没有权限
404:Spring MVC找不到对应URL
本人解决思路:
一.security和MVC执行顺序不同,security和MVC各自配置对CORS的处理,显然是不行的,最后找到了Spring MVC官方文档
解决CORS的方法有:
1.
局部配置:@CrossOrigin
在类级别和方法级别使用
2.全局配置:
《1》.Spring Boot注解配置
《2》.
extends CorsFilter:
理解:如果不和security一起用那么上面两种都可以使用,但是和security一起使用就得用extends CorsFilter,我的问题也是extends CorsFilter解决的
二.再看Spring security官方文档
理解:上面这个单独使用security时用的,接下来就是整合MVC的
也就是Spring MVC和Spring Security一起使用时只配置Spring MVC就可以了,security将使用MVC的配置。
注意:如果请求要携带cookie也就是Credentials设置位true时Origins就不能设置位“*”,否则不起作用,如果Origins不容易设置,那么security的Cors需要设置为以上的设置。
官方文档以后得多看看!