公司动态
SpringBoot 赛道|新手必看、超高收藏、实战踩坑
很多小伙伴做前后端联调时90% 都会遇到跨域CORS报错Access to fetch at ‘xxx’ from origin ‘xxx’ has been blocked by CORS policy网上教程五花八门有的让加 CrossOrigin、有的改配置、有的加拦截器。很多人只会“复制粘贴解决”根本不懂原理线上环境经常翻车今天我整理一份 SpringBoot 跨域终极解决方案涵盖局部解决、全局解决、过滤器解决适配开发、测试、生产所有场景看完彻底告别跨域问题。一、为什么会出现跨域浏览器同源策略限制协议、域名、端口任意一个不同即为跨域。前端Vue/React本地端口、后端Java端口不一致本地联调必现跨域。注意跨域是浏览器限制不是后端Bug二、方式一单个接口跨域适合临时测试直接在 Controller 方法/类上添加注解最简单适合快速调试。RestControllerRequestMapping(“/user”)CrossOriginpublic class UserController {GetMapping(/list) public Result list(){ return Result.success(); }}缺点每个类都要加项目大了难以维护不推荐生产使用。三、方式二全局跨域配置推荐企业主流写法只需要一个配置类全局所有接口自动跨域干净优雅企业项目通用。Configurationpublic class CorsConfig implements WebMvcConfigurer {Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping(/**) // 允许所有来源 .allowedOriginPatterns(*) // 允许请求方式 .allowedMethods(GET,POST,PUT,DELETE,OPTIONS) // 允许所有请求头 .allowedHeaders(*) // 允许携带Cookie .allowCredentials(true) .maxAge(3600); }}适配 SpringBoot2.x / SpringBoot3.x无需额外依赖。四、方式三过滤器统一处理跨域解决特殊拦截器冲突如果项目有拦截器、权限校验上面配置偶尔失效用过滤器方案稳得一批。Componentpublic class CorsFilter implements Filter {Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {HttpServletResponse res (HttpServletResponse) response;res.setHeader(“Access-Control-Allow-Origin”, “);res.setHeader(“Access-Control-Allow-Methods”, “GET,POST,PUT,DELETE,OPTIONS”);res.setHeader(“Access-Control-Allow-Headers”, ”);chain.doFilter(request,response);}}五、常见跨域踩坑点allowCredentialstrue 不能搭配 * 通配符高版本会报错OPTIONS 预请求不通过会直接拦截请求拦截器执行顺序优先于跨域配置会导致跨域失效生产环境不要直接开 *可配置前端固定域名更安全六、总结日常开发优先使用 全局Cors配置类简单稳定、无侵入、适合所有业务项目。学会这一套以后面试被问跨域、线上解决跨域问题直接拿捏需要完整 SpringBoot 统一跨域权限拦截兼容版源码 可以评论区留言