SpringBoot跨域的几种解决方案

innovus:Patch Wire(补丁线) 1)选中wire ,shift+A使用Edit Route功能,F3打开edit route对话框。线道Create Patch Wire,设置好层次和宽度。在修补一些min area的drc时,会有一些danling wire的drc冒出来,为了避免这些假错,可以使用工具patch wire功能。2)沿着选中的wire画线即可。如下图,patch wire和regular wire是能看出区别的。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 阅读详情

方法一、SpringBoot的注解@CrossOrigin(也支持SpringMVC)

使用注解作用到具体controller或者method上面(局部跨域)

简单粗暴的方式,Controller层在需要跨域的类或者方法上加上该注解即可

@RestController
@CrossOrigin
@RequestMapping("/situation")
public class SituationController extends PublicUtilController {

    @Autowired
    private SituationService situationService;
    // log日志信息
    private static Logger LOGGER = Logger.getLogger(SituationController.class);
    
}
/**
 *  在方法上(@RequestMapping)使用注解 @CrossOrigin 
 */
 
@RequestMapping("/hello")
@ResponseBody
@CrossOrigin("http://localhost:8080") 
public String index( ){
    return "Hello World";
}
 
/**
 * 或者在控制器(@Controller)上使用注解 @CrossOrigin
 */
 
@Controller
@CrossOrigin(origins = "http://www.xxxxx.com", maxAge = 3600)
public class AccountController {
 
    @RequestMapping("/hello")
    @ResponseBody
    public String index( ){
        return "Hello World";
    }
}

 

但每个Controller都得加,代码侵入严重,使用麻烦,加在Controller公共父类(PublicUtilController)中,所有Controller继承即可。

@CrossOrigin
public class PublicUtilController {

    /**
     * 公共分页参数整理接口
     * @param currentPage
     * @param pageSize
     * @return
     */
    public PageInfoUtil proccedPageInfo(String currentPage, String pageSize) {

        /* 分页 */
        PageInfoUtil pageInfoUtil = new PageInfoUtil();
        try {
            /*
             * 将字符串转换成整数,有风险, 字符串为a,转换不成整数
             */
            pageInfoUtil.setCurrentPage(Integer.valueOf(currentPage));
            pageInfoUtil.setPageSize(Integer.valueOf(pageSize));
        } catch (NumberFormatException e) {
        }
        return pageInfoUtil;
    }
}

当然,这里虽然指SpringBoot,SpringMVC也是同样的,但要求在Spring4.2及以上的版本。

另外,如果SpringMVC框架版本不方便修改,也可以通过修改tomcat的web.xml配置文件来处理

SpringMVC使用@CrossOrigin使用场景要求

jdk1.8+
Spring4.2+

方法二、处理跨域请求的Configuration

继承重写WebMvcConfigurer(全局跨域)

增加一个配置类,CrossOriginConfig.java。继承WebMvcConfigurerAdapter或者实现WebMvcConfigurer接口,其他都不用管,项目启动时,会自动读取配置。

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

/**
 * AJAX请求跨域
 */
@Configuration
public class CorsConfig extends WebMvcConfigurerAdapter {
    static final String ORIGINS[] = new String[] { "GET", "POST", "PUT", "DELETE" };
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**").allowedOrigins("*").allowCredentials(true).allowedMethods(ORIGINS).maxAge(3600);
    }
@Configuration
public class MyWebAppConfigurer extends WebMvcConfigurerAdapter{
 
    @Override
    public void addCorsMappings(CorsRegistry registry) {
           registry.addMapping("/api/**")
            // 放行哪些原始域
           .allowedOrigins("*")
            // 是否发送Cookie信息
           .allowCredentials(true)
            // 放行哪些原始域(请求方式)
           .allowedMethods("GET","POST", "PUT", "DELETE")
            // 放行哪些原始域(头部信息)
           .allowedHeaders("*")
            // 暴露哪些头部信息(因为跨域访问默认不能获取全部头部信息)
           .exposedHeaders("Header1", "Header2");
           .allowCredentials(false).maxAge(3600);
    }
}

 

方法三、采用过滤器(filter)的方式

通过导入配置重新生成新的CorsFilter(全局跨域)

同方法二加配置类,增加一个CORSFilter 类,并实现Filter接口即可,其他都不用管,接口调用时,会过滤跨域的拦截。

@Component
public class CORSFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        HttpServletResponse res = (HttpServletResponse) response;
        // 设置允许Cookie
        res.addHeader("Access-Control-Allow-Credentials", "true");
        // 允许http://www.xxx.com域(自行设置,这里只做示例)发起跨域请求
        res.addHeader("Access-Control-Allow-Origin", "*");
        // 设置允许跨域请求的方法
        res.addHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");
        // 允许跨域请求包含content-type
        res.addHeader("Access-Control-Allow-Headers", "Content-Type,X-CAF-Authorization-Token,sessionToken,X-TOKEN");
        if (((HttpServletRequest) request).getMethod().equals("OPTIONS")) {
            response.getWriter().println("ok");
            return;
        }
        chain.doFilter(request, response);
    }
    
    @Override
    public void destroy() {
    }
    
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }
}
@Configuration
public class CorsFilterConfig {
    @Bean
    public CorsFilter corsFilter() {
        // 1.添加CORS配置信息
        CorsConfiguration config = new CorsConfiguration();
          // 放行哪些原始域
          config.addAllowedOrigin("*");
          // 是否发送Cookie信息
          config.setAllowCredentials(true);
          // 放行哪些原始域(请求方式)
          config.addAllowedMethod("*");
          // 放行哪些原始域(头部信息)
          config.addAllowedHeader("*");
          // 暴露哪些头部信息(因为跨域访问默认不能获取全部头部信息)
          config.addExposedHeader("*");
 
        // 2.添加映射路径导入配置
        UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
        configSource.registerCorsConfiguration("/**", config);
 
        // 3.返回新的CorsFilter.
        return new CorsFilter(configSource);
    }
}

 方法五、 手动设置响应头(局部跨域)

使用 HttpServletResponse 对象添加响应头(Access-Control-Allow-Origin)来授权原始域,这里 Origin的值也可以设置为 “*”,表示全部放行。推荐:150道常见的Java面试题分解汇总

@RequestMapping("/index")
public String index(HttpServletResponse response) {
    response.addHeader("Access-Allow-Control-Origin","*");
    return "index";
}

方法四、采用nginx做动态代理

使用nginx作为代理,解决跨域问题

1)更改前端ajax访问路径:不直接访问请求接口,而是访问另外一个本域下的接口,例如:http://kuayu.com/getCat

2)修改nginx配置文件:

location /getCat { #添加访问目录为/getCat
            rewrite  ^/getCat/(.*)$ /$1 break;
            proxy_pass   http://csdn.b.com/cat/;
       }

 

ESP32-C3模组上跑通OTA升级(3) 阅读详情

相关推荐

FPGA八股文(2)——笔试的FPGA问题汇总(持续更新)

常见FPGA笔试题的概念总结

居安士的博客 8902

Spring Boot实现 CORS 跨域资源共享

CORS 是一个 W3C 标准,全称叫做"跨域资源共享"(Cross-Origin resource sharing); 在详细介绍 CORS 之前先简单介绍下什么是同源政策,这样才能了解到 CORS 的由来|必要性。 浏览器同源政策 "同源政策"是浏览器安全的基石,目前所有浏览器都实行这个政策。 含义 所谓"同源",是指以下三个相同: 协议相同 域名相同 端口相同 举个例子: 当前网址 被请求页面地址 是否跨域(不同源) 原因 http://www.wu-yikun.

BUG指挥课堂 1208

【CANoe16安装教程】亲测安装成功

CANoe16安装教程

qq_45302638的博客 2万+

SpringBoot项目跨域请求放行配置工具类

package com.ruoyi.framework.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.cors.CorsConfigurat...

zhengTornado的博客 710

新手必看:LiteRadio 2c SE遥控器从开箱到飞行的完整指南(附常见问题解答)

本文为新手提供LiteRadio 2c SE遥控器的完整使用指南,涵盖从开箱到首飞的20个关键步骤。详细介绍了遥控器的功能设置、与无人机的对频技巧以及首飞注意事项,帮助用户快速掌握飞行控制,避免常见错误。特别适合无人机初学者阅读。

weixin_29209801的博客 379

电力系统实时仿真技术:从硬件在环到主流平台实践

实时仿真是一种基于高性能计算硬件,在严格时间约束下模拟物理系统动态行为的关键技术。其核心原理在于通过硬实时计算,确保仿真步长内的模型求解与输出时间严格同步,从而构建高保真的虚拟测试环境。这项技术的核心价值在于为电力电子、新能源并网等复杂系统的研发提供了无风险的“数字沙盘”,能够安全地验证控制器逻辑、保护装置动作及系统稳定性。在工程实践中,硬件在环测试通过连接虚拟模型与真实硬件,形成了控制器硬件在环和功率硬件在环两大主流应用场景,广泛应用于设备研发、电网安全分析和人员培训。本文聚焦于电力系统领域,深入解析了实

weixin_30952479的博客 420

解决springboot 打war包到tomcat跨域访问问题。

解决springboot服务,tomcat部署的跨域问题

da_xun的专栏 552

从FP16到FP8:我是如何让Stable Diffusion 3.5提速40%而不丢画质的

本文分享了StableDiffusion模型优化的实战经验。通过FP8精度转换、分层处理敏感模块,实现显存占用降低35%、推理速度提升40%。文章详细介绍了提升画质的五大技巧、本地/云端/移动端部署方案,以及二次元模型定制等垂直领域应用。同时总结了硬件兼容性、数据质量等七大常见陷阱,并强调持续监控和伦理考量。作者指出未来应关注MoE架构、注意力机制优化等方向,认为技术优化是持续追求性能与质量平衡的过程。

达则兼济天下 1186

SpringBoot项目打包发布到外部tomcat时,出现各种异常的解决fang

先说遇到问题的情景: 初次尝试使用spring boot框架写了个小web项目,在Intellij IDEA中能正常启动运行。使用maven 运行install,生成war包,发布到本机的tomcat下,出现异常,主要的异常信息是  .......LifeCycleException。经各种搜索,找到答案。 spring boot因为内嵌tomcat容器,所以可以通过打包为ja

Glory_mm的博客 1万+

【WRF-Urban】WUDAPT详解:An Urban Weather, Climate, and Environmental Modeling Infrastructure

WUDAPT详解:An Urban Weather, Climate, and Environmental Modeling Infrastructure

WW、forever的博客 497

【x265编码器】章节1——x265的lookahead模块分析

目录一、模块功能二、lookahead模块分析1.调用流程2.代码分析Lookahead::addPicture()Lookahead::checkLookaheadQueue()Lookahead::getDecidedPicture()Lookahead::findJob()Lookahead::slicetypeDecide()PreLookaheadGroup::processTasksLookaheadTLD::lowresIntraEstimate()Lookahead::slicetypeAn

vcvdv123的博客 4万+

Spring Boot + Vue + Tomcat 跨域问题解决

SpringBoot + Vue + Tomcat 跨域问题解决SpringBoot + Vue + Tomcat 项目SpringBootTomcatVue总结 SpringBoot + Vue + Tomcat 项目 项目中,后端是jar打包方式的springboot,前端是tomcat+vue。不同的端口,有跨域问题。这里总结了项目中解决跨域问题的经验。 SpringBoot 虽然springboot有多种方式解决跨域问题,但由于springboot是采用了jar打包方式,这里就采用了@CrossOr

weixin_52767086的博客 2819

Python爬虫实战:携程旅游攻略爬取全流程解析(动态接口+反爬破解+异步爬取)

本文介绍了携程旅游攻略的爬取全流程,涵盖静态和动态页面抓取、异步请求、高级反爬策略以及数据存储和简单分析。增加用户评论和评分抓取结合NLP分析攻略文本情感与关键词建立旅游推荐系统自动化代理IP池和验证码识别模块。

2201_76125261的博客 2039

关于SpringBoot/Cloud项目的跨域的几种解决方案

关于SpringBoot/Cloud项目的跨域的几种解决方案 跨域资源共享(CORS) 是一种机制,它使用额外的 HTTP 头来告诉浏览器 让运行在一个 origin (domain) 上的Web应用被准许访问来自不同源服务器上的指定的资源。当一个资源从与该资源本身所在的服务器不同的域、协议或端口请求一个资源时,资源会发起一个跨域 HTTP 请求。 比如,站点 http://domain-a.com 的某 HTML 页面通过 <img> 的 src 请求 http://domain-b.co

XUDC的程序人生 943

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

SpringBoot应用解决浏览器跨域问题CORS的几种解决方案

本文介绍了四种在Spring框架中解决跨域问题的方法。第一种是通过@CrossOrigin注解,直接在控制器类或方法上配置跨域参数,如允许的源、请求头、响应头等。第二种是通过实现Filter接口的过滤器,在请求处理前设置响应头以支持跨域。第三种是通过实现HandlerInterceptor接口的拦截器,在请求处理前后进行跨域配置。第四种是在WebMvcConfigurer实现类中直接配置跨域映射,允许所有路径和来源的跨域请求。每种方法都提供了详细的代码示例和配置说明,开发者可以根据具体需求选择合适的方式解决

2503_92145588的博客 622

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

SpringBoot 项目解决跨域的几种方案

在用SpringBoot开发后端服务时,我们一般是提供接口给前端使用,但前端通过浏览器调我们接口时,浏览器会有个同源策略的限制,即`协议`,`域名`,`端口`任一不一样时都会导致跨域,这篇文章主要介绍跨域的几种常用解决方案。

junkaione的博客 1698

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

跨域问题及解决方案

跨域问题的定义、产生原因及常见的后端解决方案

m0_62909831的博客 1568

跨域产生的原因以及常见的解决方案

跨域:是指浏览器不能执行其他网站的脚本,它是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制! 同源策略:是指协议(http、https、rtmp…)、域名(jd、taobao、baidu)、端口(80、8080、443)其中有一个不同都产生跨域 跨域引发的请求报错浏览器显示如下图 Access to XMLHttpRequest at 'http://192.168.0.99:3331/authentication/form?username=TAO&password=12

程序员劝退师的博客 976

CORS跨域访问

CORS(Cross-Origin Resource Sharing)“跨域资源共享”,是一个W3C标准,它允许浏览器向跨域服务器发送Ajax请求,打破了Ajax只能访问本站内的资源限制,CORS在很多地方都有被使用,微信支付的JS支付就是通过JS向微信服务器发送跨域请求。开放Ajax访问可被跨域访问的服务器大大减少了后台开发的工作,前后台工作也可以得到很好的明确以及分工,下面我们就看讲一下如何让你的SpringBoot项目支持CORS跨域。 2 跨域问题的解决方案 2.1 jsonp jsonp应

weixin_44510483的博客 265

解决Ajax与Spring Boot跨域通信问题

在做毕业设计过程中,需要将前后端完全分离,在这里就涉及到了前后端跨域访问的问题,在前端使用Ajax与Spring Boot后台进行通信。通过查找其他博客,我发现了下面这些方法: 1. 在HTML文件中添加下面这句话 &lt;meta http-equiv="Access-Control-Allow-Origin" content="*"&gt; &lt;meta http-equiv=...

饿了,吃包子 315

项目里面怎么解决跨域的?

前端解决跨域的几种方式

weixin_70245286的博客 1514

处理 CORS 跨域请求

CORS是一个W3C标准,全称是”跨域资源共享”(Cross-origin resource sharing),允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。它通过服务器增加一个特殊的Header[Access-Control-Allow-Origin]来告诉客户端跨域的限制,如果浏览器支持CORS、并且判断Origin通过的话,就会允许XMLHttpRequest发起跨域请求。

weixin_45816407的博客 565

前后端分离——跨域访问

前后端分离——跨域访问

littleyy666的博客 850

跨域问题解决与原因

我的碎碎念: 本人在学习springBoot连接前后端的时候,当前端需要后端的请求数据的时候会向后端所要数据,因此这个数据会传递给前端,当然在继续跨域访问的时候会出现一些问题,这里本人对此进行了一些整理:希望评论区能够进行补充,当然在这里感谢:这个位大佬提供的博客,我也是在他的基础上整理。 https://blog.youkuaiyun.com/qq_43486273/article/details/83272500 什么时候会发生跨域 从上图大致可以得出相应的结论,将a看做前端请求,b看作后端请求,当然我这里对.

仓小小鼠 354

【SpringBoot系列】实现跨域的几种方式

跨域是指一个域下的文档或脚本试图去请求另一个域下的资源,或者涉及到两个不同域名的资源之间的交互。由于同源策略(Same Origin Policy)的限制,浏览器不允许跨域请求。同源策略规定,A网页设置的Cookie、LocalStorage和IndexDB无法被同源以外的网页读取。跨域请求会被浏览器拒绝。举个例子:-和是两个不同的域名,它们之间的请求就是跨域请求。和虽然路径不同,但是域名相同,所以不是跨域。ss。

Venus's Blog 8万+

springboot设置跨域的几种方式

在进行web项目开发的时候,前后端分离往往是很常见的开发方式,而说到前后端分离,最常见的问题无非就是跨域了。如何解决跨域问题几乎已经成为了web开发的必修课。本文将提供几种常见的基于springboot的跨域解决思路,鉴于作者水平有限,若有错误,欢迎指正。 单个Controller及方法: @CrossOrigin作为一个强大的注解,特点就是不仅支持在controller中设置,...

Welcome to Domla's world 3886
上一篇: 深入理解JVM虚拟机5:虚拟机字节码执行引擎
下一篇: redis的三种集群模式原理
wrr-cat
博客等级 码龄9年 128粉丝 302原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值