springboot中实现跨域的5种方式(代码片段)

剑雪封喉r 剑雪封喉r     2023-03-24     474

关键词:

对于 CORS的跨域请求,主要有以下几种方式可供选择:
1、返回新的CorsFilter (全局跨域)

package com.cfit.framework.config;

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;

@Configuration
public class CorsConfig 
    @Bean
    public CorsFilter corsFilter() 
	// 1. 添加 CORS配置信息
	CorsConfiguration config = new CorsConfiguration();
	// 放行哪些原始域
	config.addAllowedOrigin("*");
	// 是否发送 Cookie
	config.setAllowCredentials(true);
	// 放行哪些请求方式
	config.addAllowedMethod("*");
	// 放行哪些原始请求头部信息
	config.addAllowedHeader("*");
	// 暴露哪些头部信息
	config.addExposedHeader("*");
	// 2. 添加映射路径
	UrlBasedCorsConfigurationSource corsConfigurationSource = new UrlBasedCorsConfigurationSource();
	corsConfigurationSource.registerCorsConfiguration("/**", config);
	// 3. 返回新的CorsFilter
	return new CorsFilter(corsConfigurationSource);
    

2、重写 WebMvcConfigurer (全局跨域)

package com.cfit.framework.config;

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

@Configuration
public class CorsConfig implements WebMvcConfigurer 
    @Override
    public void addCorsMappings(CorsRegistry registry) 
	registry.addMapping("/**")
	// 是否发送Cookie
		.allowCredentials(true)
		// 放行哪些原始域
		.allowedOrigins("*").allowedMethods(new String[]  "GET", "POST", "PUT", "DELETE" ).allowedHeaders("*").exposedHeaders("*");
    

3、使用注解 @CrossOrigin (局部跨域 springboot 2.4.x不支持这个策略) 允许可访问的域列表, 准备响应前的缓存持续的最大时间(以秒为单位),是否允许用户发送、处理 cookie

@CrossOrigin(origins = "*", maxAge = 3600,allowCredentials = "true")

4、手动设置响应头 (HttpServletResponse) (局部跨域)

    @RequestMapping("/index")
    public String index(HttpServletResponse response) 
	    response.addHeader("Access-Allow-Control-Origin", "*");
	    response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
	    response.setHeader("Access-Control-Max-Age", "3600");
	    response.setHeader("Access-Control-Allow-Headers", "x-requested-with,content-type");
	    return "index";
    

5、自定web filter 实现跨域 (全局跨域)

package com.cfit.framework.config;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebFilter("/*")
public class CorsConfig implements Filter 
    public void init(FilterConfig filterConfig) throws ServletException 
    

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException 
	HttpServletResponse res = (HttpServletResponse) response;
	HttpServletRequest req = (HttpServletRequest) request;
	String origin = req.getHeader("Origin");
	if (!org.springframework.util.StringUtils.isEmpty(origin)) 
	    // 带cookie的时候,origin必须是全匹配,不能使用*
	    res.addHeader("Access-Control-Allow-Origin", origin);
	
	res.addHeader("Access-Control-Allow-Methods", "*");
	String headers = req.getHeader("Access-Control-Request-Headers");
	// 支持所有自定义头
	if (!org.springframework.util.StringUtils.isEmpty(headers)) 
	    res.addHeader("Access-Control-Allow-Headers", headers);
	
	res.addHeader("Access-Control-Max-Age", "3600");
	// cookie
	res.addHeader("Access-Control-Allow-Credentials", "true");
	// 处理options请求
	if (req.getMethod().toUpperCase().equals("OPTIONS")) 
	    return;
	
	// 获取token
	// String auth = req.getHeader("Authorization");
	String auth = req.getHeader("token");
	chain.doFilter(request, response);
    

    @Override
    public void destroy() 
    

 


 

跨域问题和django中实现跨域(代码片段)

跨域问题1.同源策略(浏览器的安全功能):请求的url地址,必须与浏览器上的url地址处于同域上,也就是域名,端口,协议相同2.CORS跨域资源共享实现CORS通信的关键是服务器,只要服务器实现了CORS接口,就可以跨源通信3.CORS请求分为简单... 查看详情

springboot解决跨域的四种姿势(代码片段)

简介跨域我就不多说了,我们今天开门见山直接解决跨域的几种姿势,那就上姿势姿势姿势一importorg.springframework.context.annotation.Configuration;importorg.springframework.web.servlet.config.annotation.CorsRegistry;importorg.springframework.web.s 查看详情

springboot实现跨域的5种方式,总有一种适合你,建议收藏!!

点击关注公众号,Java干货及时送达一、为什么会出现跨域问题出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器... 查看详情

springboot配置cors跨域的几种方法(代码片段)

作记录用请参考https://blog.csdn.net/lizc_lizc/article/details/81155895 第一种:  在每个controller上添加 @CrossOrigin第二种:使用拦截器  1、方法一@ConfigurationpublicclassCorsConfig@BeanpublicCorsFiltercorsFilter()final 查看详情

解决springboot跨域的三种方式

原文链接: https://3water.com/article/cMTM39MjMzdLmY5一、什么是跨域1.1、为什么会出现跨域问题出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏... 查看详情

springboot的cros跨域问题经常始终不能解决跨域的原因(代码片段)

SpringBoot的Cros跨域问题经常始终不能解决跨域的原因问题问题的根本原因配置方法SpringBoot2.2.X版本SpringBoot2.5.X版本问题在配置跨域的@Configuration的时候,发现无论是.allowedOrigns()还是.allowedOriginParrtens()都解决不了的时候请看... 查看详情

springboot解决全局和局部跨域问题的两种方式(代码片段)

前言在如今前后端分离的开发模式下,跨域是一个非常经典的问题,解决的方式也有很多,比如代理服务器,使用JSONP我之前也写过一篇解决跨域问题的文章,感兴趣的可以参考:解决Vue前后端跨域问题的... 查看详情

springboot的cros跨域问题经常始终不能解决跨域的原因(代码片段)

SpringBoot的Cros跨域问题经常始终不能解决跨域的原因问题问题的根本原因配置方法SpringBoot2.2.X版本SpringBoot2.5.X版本问题在配置跨域的@Configuration的时候,发现无论是.allowedOrigns()还是.allowedOriginParrtens()都解决不了的时候请看... 查看详情

springboot的cros跨域问题经常始终不能解决跨域的原因(代码片段)

SpringBoot的Cros跨域问题经常始终不能解决跨域的原因问题问题的根本原因配置方法SpringBoot2.2.X版本SpringBoot2.5.X版本问题在配置跨域的@Configuration的时候,发现无论是.allowedOrigns()还是.allowedOriginParrtens()都解决不了的时候请看... 查看详情

跨域的几种方法(代码片段)

1、jsonp最常见的一种跨域方式,其背后原理就是利用了script标签不受同源策略的限制,在页面中动态插入了script,script标签的src属性就是后端api接口的地址,并且以get的方式将前端回调处理函数名称告诉后端,后端在响应请求时... 查看详情

详解cors跨域的几种不同实现方式(代码片段)

CORS定义CORS是一个W3C标准,全称是"跨域资源共享"(Cross-originresourcesharing),它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。提供了Web服务从不同域传来沙盒脚本的方法,以避开浏览器的... 查看详情

在electron中实现跨域请求

参考技术A由于我在axios中设置了withCredentials:false,导致cookie携带不了。解决方案:在Electron的BrowserWindow模块中配置这样一个参数: 查看详情

jquery中ajax处理跨域的三大方式(代码片段)

这篇文章主要介绍了jquery中ajax处理跨域的三大方式,感兴趣的小伙伴们可以参考一下由于JS同源策略的影响,因此js只能访问同域名下的文档。因此要实现跨域,一般有以下几个方法:一、处理跨域的方式:1.... 查看详情

牛客网面试题总结(代码片段)

9月18号javascript中实现跨域的方式总结✔jsonp请求;jsonp的原理是利用<script>标签的跨域特性,可以不受限制地从其他域中加载资源,类似的标签还有<img>document.domain;这种方式用在主域名相同子域名不同的... 查看详情

相关前台跨域的解决方式(代码片段)

title:前端跨域处理方式date:2018-07-0800:37:29categories:Web前端tags:跨域cors关于跨域请求解觉方案问题关于浏览器跨域问题,项目中也遇到了,看了项目上一些代码的处理方式,感觉存在不少不大完善的地方,因此对于跨域,想好好梳... 查看详情

解决跨域的方式(9种)(代码片段)

 1.jsonp1)JSONP原理利用<script>标签没有跨域限制的漏洞,网页可以得到从其他来源动态产生的JSON数据。JSONP请求一定需要对方的服务器做支持才可以。2)JSONP和AJAX对比JSONP和AJAX相同,都是客户端向服务器端发送请求,从服务... 查看详情

springboot自定义拦截器和跨域配置冲突

参考技术A在我们使用springboot中,难免遇到前后端分离的场景,因此也带来的问题是跨域请求,虽然springboot在配置跨域请求中非常方便,但是如果投跨域场景和自定义拦截器一起使用的话,那就没那么顺利了。二者功能会有冲突... 查看详情

springboot跨域处理的几种方式(代码片段)

作者简介作者名:编程界小明哥简介:CSDN博客专家,从事软件开发多年,精通Java、JavaScript,博主也是从零开始一步步把学习成长、深知学习和积累的重要性,喜欢跟广大ADC一起打野升级,欢迎您关注&... 查看详情