当前位置: 首页 > 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 和所有拦截器。

相关文章:

  • 已知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
  • 北京人艺新戏《一日顶流》将出现人工智能角色
  • 再囤三个月库存!美国客户抢付尾款,外贸企业发货订单排到7月
  • 国家统计局:要持续加大好房子建设供应力度,积极推动城市更新行动和保障房建设
  • “上海-日喀则”援藏入境旅游包机在沪首航
  • 网警打谣:传播涉刘国梁不实信息,2人被处罚
  • 淄博一酒店房间内被曝发现摄像头,当地警方已立案调查