SpringBoot(SpringMVC)之跨域设置(CROS的配置)

1.声明

当前的内容用于本人学习和复习的作用,主要用于解决当前的跨域的问题!

什么是跨域?个人理解就是:使用一个端口访问另外一个端口中的内容,这就存在跨域问题,一般是由于浏览器出于安全设定,不允许跨域请求,但是某些时候又需要跨域的支持(例如:前后端分离的项目,前端在一个端口,后端在另外一边,但是前端需要访问后端获取数据)

2.不配置跨域直接访问

在这里插入图片描述
这里报了一大堆的错误,通过debug发现请求到达了SpringMVC中,但是没有数据返回

3.SpringBoot中配置跨域(当你的Spring版本大于或等于4.2版本时可以使用)

从当前的SpringBoot中的CROS中可以知道
在这里插入图片描述
只有Spring版本从4.2开始才有跨域支持!
1.使用的方式用@Controller和@CrossOrgin一起使用,可以实现跨域!
2.使用定义全局的跨域配置:可以通过实现WebMvcConfigurer并重写addCorsMappings方法来实现跨域

使用第二种方式实现跨域:(这里我使用配置类方式)

/**
 * @description 当前的跨域的配置
 * @author hy
 * @date 2020-03-28
 */
@Configuration
public class CorsConfig implements WebMvcConfigurer {
	@Override
	public void addCorsMappings(CorsRegistry registry) {
		registry.addMapping("/**").allowedOrigins("*").allowCredentials(true)
				.allowedMethods("GET", "POST", "DELETE", "PUT", "PATCH").maxAge(3600);
	}
}

这里的意思就是配置跨域映射为访问任意的Mapping,就是允许任意地方访问这个

4.另外一种通用的配置(基于Filter方式实现的跨域)

@Order(value = 1) 
@WebFilter(filterName = "myCorsFilter", urlPatterns = "/*")
public class CorsFilter implements Filter {
	@Override
	public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain)
			throws IOException, ServletException {
		ResponseFacade response =  (ResponseFacade) servletResponse;
		response.setHeader("Access-Control-Allow-Origin", "*");
		response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
		response.setHeader("Access-Control-Max-Age", "3600");
		response.setHeader("Access-Control-Allow-Headers", "*");
		chain.doFilter(servletRequest, servletResponse);
	}

}

注意:
1.使用这个注解方式需要开启@ServletComponentScan在@Configuration类的上面
2.由于当前Spring的版本中可能已经注册了CorsFilter,注意当前的filterName可能不能为corsFilter,出现两个名称一致的Filter,就会报错!

这个是SpringBoot 2.2.5.RELEASE,中已经存在的CorsFilter

在这里插入图片描述
如果时在SpringMVC环境中需要在web.xml中配置Filter!

5.总结

1.跨域可能导致不能访问的情况,解决需要按照特定的方式解决

2.使用过滤器方式实现,需要小心当前SpringBoot中是否已经注册了名称为corsFilter,否则报错,需要修改filterName

3.使用注解方式实现的缺点就是每个类都需要配置一次,复杂

4.建议使用添加addCorsMappings方式更加简单,但是需要注意你的Spring的版本,否则无效

5.我们需要按照不同的情况实现不同的跨域方式!

以上纯属个人见解,如有问题请联系本人!

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值