SpringBoot2.0 跨域处理

SpringBoot2.0 跨域处理

1.原因

在前后端项目分离时,最先遇到的问题也许就是跨域

其他原因,不再赘述。

2.环境

①.spring-boot:2.1.0.RELEASE

3.解决跨域的伪三种方式(本质一样)

一、Application.java直接配置Bean

@SpringBootApplication
public class Application {
	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}


	@Bean
	public CorsFilter corsFilter() {
		final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
		final CorsConfiguration config = new CorsConfiguration();
		// 允许cookies跨域
		config.setAllowCredentials(true);
		// 允许向该服务器提交请求的URI,*表示全部允许。。这里尽量限制来源域,比如http://xxxx:8080
		// ,以降低安全风险。。
		config.addAllowedOrigin("*");
		// 允许访问的头信息,*表示全部
		config.addAllowedHeader("*");
		// 预检请求的缓存时间(秒),即在这个时间段里,对于相同的跨域请求不会再预检了
		config.setMaxAge(18000L);
		// 允许提交请求的方法,*表示全部允许,也可以单独设置GET、PUT等
		config.addAllowedMethod("*");

		/*
		 * config.addAllowedMethod("HEAD"); config.addAllowedMethod("GET");//
		 * 允许Get的请求方法 config.addAllowedMethod("PUT");
		 * config.addAllowedMethod("POST"); config.addAllowedMethod("DELETE");
		 * config.addAllowedMethod("PATCH");
		 */
		source.registerCorsConfiguration("/**", config);
		return new CorsFilter(source);
	}
}

二、定义配置类

新建一个CorsConfig.java(名字随意)
/**
 * 说明:处理跨域请求
 *
 * @author lt
 * @version v1.0
 * @date 2018/1/21/
 */
@Configuration
@EnableWebMvc
public class CorsConfig implements WebMvcConfigurer {

    //跨域处理 另一种方式
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        //设置允许跨域的路径
        registry.addMapping("/**")
                //设置允许跨域请求的域名
                .allowedOrigins("*")
                //是否允许证书 不再默认开启
                .allowCredentials(true)
                //设置允许的方法
                .allowedMethods("*")
                //跨域允许时间
                .maxAge(3600);
    }
}

三、添加@CrossOrigin注解

在需要跨域的Controller类或方法名上添加@CrossOrigin注解
其中@CrossOrigin中的2个参数:
origins : 允许访问的域列表。如(origins = "http://csdn.com")
maxAge:响应前缓存持续最大时间(秒)。如(maxAge = 600)

为什么叫伪呢?因为这不是全局解决方案。

在Spring Boot中处理跨域问题可以通过以下步骤进行: 1. 添加跨域配置类:创建一个类并注解为`@Configuration`,并实现`WebMvcConfigurer`接口。在该类中重写`addCorsMappings`方法。 ```java @Configuration public class CorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") // 允许跨域访问的路径 .allowedOrigins("*") // 允许跨域访问的源 .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") // 允许请求方法 .allowCredentials(true) // 是否发送cookie .maxAge(3600); // 预检间隔时间 } } ``` 2. 注册跨域配置类:在`Application`类上添加注解`@EnableWebMvc`,并将跨域配置类添加到Spring Boot应用中。 ```java @SpringBootApplication @EnableWebMvc public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 3. 配置全局跨域过滤器(可选):如果上述方法无法解决跨域问题,可以使用全局跨域过滤器。 ```java @Component @Order(Ordered.HIGHEST_PRECEDENCE) public class CorsFilter implements Filter { @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletResponse response = (HttpServletResponse) res; HttpServletRequest request = (HttpServletRequest) req; response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); response.setHeader("Access-Control-Allow-Headers", "Authorization, Content-Type, Accept"); response.setHeader("Access-Control-Max-Age", "3600"); if ("OPTIONS".equalsIgnoreCase(request.getMethod())) { response.setStatus(HttpServletResponse.SC_OK); } else { chain.doFilter(req, res); } } // 省略其他方法 } ``` 通过以上步骤,你就可以在Spring Boot中成功处理跨域问题了。请注意,跨域配置应该根据你的实际需求进行调整,例如允许的源、方法和头部等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值