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

SpringBoot-允许跨域配置

文章目录

  • 什么是跨域?
  • 为什么需要配置跨域?
  • 如何实现?

什么是跨域?

跨域(Cross-Origin Resource Sharing,简称 CORS)是一种安全策略,用于限制一个域的网页如何与另一个域的资源进行交互。这是浏览器实现的同源策略(Same-Origin Policy)的一部分,旨在防止恶意网站通过一个域的网页访问另一个域的敏感数据。

为什么需要配置跨域?

  1. 浏览器出于安全考虑实施了同源策略,默认阻止跨域请求。
  2. 为了在保证安全的前提下,让Web应用能够合理地进行跨源资源访问。

如何实现?

项目中构建以下配置类即可。

import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import com.sun.xml.bind.v2.util.ByteArrayOutputStreamEx;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;@Configuration
public class MvcConfig implements WebMvcConfigurer {/*** 跨域设置** @param registry registry*/@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowCredentials(true).allowedMethods("*").allowedOriginPatterns("*").allowedHeaders("*");}/*** 乱码设置** @return HttpMessageConverter*/@Beanpublic HttpMessageConverter<String> responseBodyConverter() {return new StringHttpMessageConverter(StandardCharsets.UTF_8);}/*** 返回数据格式转换*/@Overridepublic void configureMessageConverters(List<HttpMessageConverter<?>> converters) {FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();//升级最新版本需加=============================================================List<MediaType> supportedMediaTypes = new ArrayList<>();supportedMediaTypes.add(MediaType.APPLICATION_JSON);supportedMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);supportedMediaTypes.add(MediaType.APPLICATION_ATOM_XML);supportedMediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED);supportedMediaTypes.add(MediaType.APPLICATION_OCTET_STREAM);supportedMediaTypes.add(MediaType.APPLICATION_PDF);supportedMediaTypes.add(MediaType.APPLICATION_RSS_XML);supportedMediaTypes.add(MediaType.APPLICATION_XHTML_XML);supportedMediaTypes.add(MediaType.APPLICATION_XML);supportedMediaTypes.add(MediaType.IMAGE_GIF);supportedMediaTypes.add(MediaType.IMAGE_JPEG);supportedMediaTypes.add(MediaType.IMAGE_PNG);supportedMediaTypes.add(MediaType.TEXT_EVENT_STREAM);supportedMediaTypes.add(MediaType.TEXT_HTML);supportedMediaTypes.add(MediaType.TEXT_MARKDOWN);supportedMediaTypes.add(MediaType.TEXT_PLAIN);supportedMediaTypes.add(MediaType.TEXT_XML);fastConverter.setSupportedMediaTypes(supportedMediaTypes);//创建配置类FastJsonConfig fastJsonConfig = new FastJsonConfig();//修改配置返回内容的过滤fastJsonConfig.setSerializerFeatures(SerializerFeature.DisableCircularReferenceDetect,SerializerFeature.WriteMapNullValue);fastConverter.setFastJsonConfig(fastJsonConfig);//将fastjson添加到视图消息转换器列表内converters.add(fastConverter);}/*** 配置拦截器** @param registry InterceptorRegistry*/@Overridepublic void addInterceptors(InterceptorRegistry registry) {}@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/**").addResourceLocations("classpath:/**");}}

以上为个人学习分享,如有问题,欢迎指出:)

http://www.xdnf.cn/news/9330.html

相关文章:

  • Linux显示磁盘空间情况——df命令详解与实战
  • Teigha应用——解析CAD文件(DWG格式)Teigha在CAD C#二次开发中的基本应用
  • 13. CSS定位与伪类/伪元素
  • 60.AI流式回答功能前端实现
  • 【Linux】shell脚本的常用命令
  • 2025年机动车授权签字人考试题库及答案
  • Spyglass:项目目录中的报告结构
  • 从SPDY到HTTP/2:网络协议的革新与未来
  • 华为认证中HCIA/HCIP/HCIE是什么等级?怎么考试?
  • 【NLP基础知识系列课程-Tokenizer的前世今生第三课】多模态世界中的 Tokenizer 策略
  • Leetcode 25. K 个一组翻转链表
  • 在 springboot3.x 使用 knife4j 以及常见报错汇总
  • 力扣面试150题--完全二叉树的节点个数
  • 当UI设计师遇上数字孪生:如何用设计思维重构工业流程?
  • 1998-2023年各地级市国内生产总值、地级市GDP数据(市辖区)
  • 依赖注入(DI)/控制反转(IoC) nodejs案例详解
  • 「提效」AI办公 | 实测,飞书扣子空间快速迭代
  • 网络常识:网线和光纤的区别
  • SD卡+FATFS+Tinyjpeg图片解码显示 (STM32F103VET6通过CubeMX快速建立工程)
  • NAT的映射类型详解:从基础到高级应用
  • 上海市计算机学会竞赛平台2025年5月月赛丙组稳定区间
  • 计算机视觉---YOLOv3
  • 5.0.7 TabControl的使用
  • 如何创建一个流程图/思维导图
  • 3分钟学会跨浏览器富文本编辑器开发:精准光标定位+内容插入(附完整代码)
  • MATLAB使用多个扇形颜色变化表示空间一个点的多种数值
  • STM32CubeMX,arm-none-eabi-gcc简单试用
  • MybatisPlus - Interceptor(拦截器)的功能点
  • AWS创建github相关的角色
  • Debian 系统 Python 开发全解析:从环境搭建到项目实战