当前位置: 首页 > news >正文

Springboot 跨域拦截器配置说明

错误代码

  • 跨域设置
@Configuration
public class WebConfig implements WebMvcConfigurer {/*** cors 跨域配置*/@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS").allowCredentials(true).allowedOriginPatterns("*").allowCredentials(true).maxAge(3600);}
}
  • 业务拦截器
public class LoginInterceptor implements HandlerInterceptor {// 白名单private static final Set<String> whiteList = new HashSet<>();static {whiteList.add("/index.html");}@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println(request.getMethod());String url = request.getServletPath();if (whiteMatcher(url)) {return true;}String token = request.getHeader(tokenConfig.getHeader());System.out.println(token);return true;}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {LoginCache.removeUser(); // 从当前线程移除登录用户信息}
}

问题

  • 业务拦截其中可能会拦截到"OPTIONS"类型的请求。

正确代码

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;import java.util.Arrays;
import java.util.Collections;@Configuration
public class CorsConfig {@Beanpublic CorsFilter corsFilter() {CorsConfiguration config = new CorsConfiguration();config.setAllowedOriginPatterns(Collections.singletonList("*"));config.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE", "OPTIONS"));config.setAllowedHeaders(Collections.singletonList("*"));config.setAllowCredentials(true);config.setMaxAge(86400L);UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();source.registerCorsConfiguration("/**", config);return new CorsFilter(source);}
}

底层代码说明

  • WebMvcConfigurer 方式:通过 addCorsMappings 配置的 CORS 规则会被封装为 HandlerMapping 级别的 CORS 处理器,它在 DispatcherServlet 处理请求时才会生效。
  • CorsFilter 方式:直接注册 CorsFilter 作为一个独立的过滤器,它在 FilterChain 最前端执行,早于 DispatcherServlet 和所有拦截器。
http://www.dtcms.com/a/200389.html

相关文章:

  • 已知6、7、8月月平均气温和标准差,求夏季季平均温度与标准差
  • 《Opensearch-SQL》论文精读:2025年在BIRD的SOTA方法(Text-to-SQL任务)
  • LightRAG 由入门到精通
  • leetcode刷题日记——对称二叉树
  • 使用腾讯云高性能空间部署YOLOv11训练模型
  • C/C++ 知识点:引用临时对象
  • JavaScript篇:前端模块化进化史:从CommonJS到ES6的奇幻之旅
  • Python Django 的 ORM 编程思想及使用步骤
  • 通过vcpkg交叉编译grpc:构建Arm64平台的Docker化开发环境
  • ALTER AGGREGATE使用场景
  • JSON-to-Excel插件 v2.1.2 新增功能批量转换功能
  • 2025毕业论文与答辩资料精选汇总
  • kotlin Flow的技术范畴
  • 【高德开放平台-注册安全分析报告】
  • 解释:神经网络
  • Python实现VTK - 自学笔记(3):三维数据处理与高级可视化
  • 常用算法/机理模型演示平台搭建(一)
  • Apollo10.0学习——planning模块(8)之scenario、Stage插件详解
  • 2025年PMP 学习二十一 14章 项目立项管理
  • JWT : JSON Web Token
  • 中科固源Wisdom平台发现NASA核心飞行控制系统(cFS)通信协议健壮性缺陷!
  • python使用jsonpath-ng库操作json数据
  • 超级管理员租户资源初始化与授权管理设计方案
  • vue项目启动报错
  • 从代码学习深度学习 - 用于预训练词嵌入的数据集 PyTorch版
  • docker默认存储迁移
  • 【Nuxt3】安装 Naive UI 按需自动引入组件
  • 【QT】一个界面中嵌入其它界面(一)
  • PyQt5绘图全攻略:QPainter、QPen、QBrush与QPixmap详解
  • 第十六届蓝桥杯复盘