SpringBoot设置允许跨域请求
跨域
一个资源会发起一个跨域HTTP请求(Cross-site HTTP request), 当它请求的一个资源是从一个与它本身提供的第一个资源的不同的域名时 。比如说,域名A(http://domaina.example)的某 Web 应用程序中通过标签引入了域名B(http://domainb.foo)站点的某图片资源(http://domainb.foo/image.jpg),域名A的那 Web 应用就会导致浏览器发起一个跨站 HTTP 请求。在当今的 Web 开发中,使用跨站 HTTP 请求加载各类资源(包括CSS、图片、JavaScript 脚本以及其它类资源),已经成为了一种普遍且流行的方式。正如大家所知,出于安全考虑,浏览器会限制脚本中发起的跨站请求。
更多说明查看:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS
CROS
CORS 全称为 Cross Origin Resource Sharing(跨域资源共享),服务端只需添加相关响应头信息,即可实现客户端发出 AJAX 跨域请求。
允许跨域配置
配置拦截器(实现WebMvcConfigurer 接口)
//springboot 2.0以上的方式
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowedHeaders("Content-Type","X-Requested-With","accept,Origin","Access-Control-Request-Method","Access-Control-Request-Headers","token").allowedMethods("*").allowedOrigins("*").allowCredentials(true);}
}
配置拦截器实现跨域方式2
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;@Configuration
public class WebMvcConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new HandlerInterceptor() {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {response.addHeader("Access-Control-Allow-Origin", "*");response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");//请求头中的自定义字段是不允许跨域需要配置此配置或者配置response.addHeader("Access-Control-Allow-Headers", "*");response.addHeader("Access-Control-Allow-Headers","Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers,token"); return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {}});}}
配置过滤器
@Configuration
public class GlobalCorsConfig {@Beanpublic CorsFilter corsFilter() {CorsConfiguration config = new CorsConfiguration();config.addAllowedOrigin("*");config.setAllowCredentials(true);config.addAllowedMethod("*");config.addAllowedHeader("*");config.addExposedHeader("*");UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();configSource.registerCorsConfiguration("/**", config);return new CorsFilter(configSource);}
}
配置局部跨域
@CrossOrigin(maxAge = 3600)
@RestController
@RequestMapping("/hello")
public class HelloController {@CrossOrigin("http://domain2.com")@RequestMapping("/{id}")public void retrieve(@PathVariable Long id) {// ...}@RequestMapping(method = RequestMethod.DELETE, path = "/{id}")public void remove(@PathVariable Long id) {// ...}
}
参数说明
Access-Control-Allow-Origin:允许访问的客户端域名,例如:http://web.xxx.com,若为 *,则表示从任意域都能访问,即不做任何限制。
Access-Control-Allow-Methods:允许访问的请求类型,多个请求类型用逗号分割,例如GET,POST,PUT,DELETE,OPTIONS。
Access-Control-Allow-Credentials:是否允许请求带有验证信息,若要获取客户端域下的 cookie 时,需要将其设置为 true。
Access-Control-Allow-Headers:允许服务端访问的客户端请求头,多个请求头用逗号分割,例如:Content-Type。
Access-Control-Expose-Headers:允许客户端访问的服务端响应头,多个响应头用逗号分割。
SpringBoot设置允许跨域请求相关推荐
- SpringBoot2.1.5 (22)--- SpringBoot设置支持跨域请求
SpringBoot2.1.5 (22)--- SpringBoot设置支持跨域请求 现代浏览器处于安全的考虑,在http/https请求时必须遵守同源策略,否则即使跨域的http/https 请求, ...
- Node.js设置CORS跨域请求中多域名白名单的方法
允许跨域请求,主要就是配置Response响应头中的 Access-Control-Allow-Origin 属性为你允许该接口访问的域名. 最常见的设置是: res.header('Access-C ...
- springboot实现ajax跨域请求
有段时间没写文章了.看到有人提问ajax跨域请求的问题. 博主要再次强调,跨域,就是从不同的的IP端口获取数据,比如说,从www.baidu.com获取数据,就叫跨域!那么localhost:8080 ...
- Chrome设置允许跨域请求
项目开发过程中,跨域问题再所难免,解决跨域的方法也很多.最常用的方法莫过于配置Nginx解决跨域(自行百度Nginx跨域设置).但是作为开发环境,临时调试一些东西,最快的方法是设置Chrome允许跨域 ...
- springboot 添加允许跨域_springboot设置cors跨域请求的两种方式
1.第一种: public class CorsFilter extends OncePerRequestFilter { static final String ORIGIN = "Ori ...
- Spring Boot学习总结(6)——SpringBoot解决ajax跨域请求问题的配置
ajax是一种创建交互式网页应用的网页开发技术,是一种用于创建快速动态网页的技术,通过在后台与服务器进行少量数据交换.而ajax的跨域问题则是请求了其他项目的接口地址,当协议.子域名.主域名.端口号中 ...
- springboot + vue项目跨域请求解决方案
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS 以下是跨域解决方案 服务端添加一个拦截器即可 @Compon ...
- IIS设置允许跨域请求
1. 打开 IIS 管理器,选择 HTTP 响应标头. 2. 设置内容如下. Access-Control-Allow-Headers:Content-Type, api_key, Authoriza ...
- SpringBoot允许跨域请求
在前后端分离的架构中,允许跨域请求是一个很重要的设置.SpringBoot项目中允许跨域请求比较简单,只需要我们定义好配置类即可. 在com.example.csdn.config包里面创建CorsC ...
最新文章
- boost::histogram::algorithm::reduce用法的测试程序
- QtObject QML类型
- 【转】接口 与 抽象类
- 博客园 使用锚和书签制作目录
- 神器!Alibaba Sentinel,功能真心强大!
- NAT- STUN和TURN简介
- python 共享内存 c_如何在python和C/C++中使用共享内存
- 2020最新安卓版本是多少_努比亚Z20安卓P版本刷机包(官方最新固件rom下载V2.24正式版)...
- U盘写保护的解决办法,亲自实践,原创!
- 用MATLAB对语音进行基频搬移,语音信号变声处理系.doc
- 和合信诺牵手招行私人银行,构建智能合规知识引擎
- vue路由传参 params传参不能传对象
- Echarts 里的桑基图
- 10005---数据采集与埋点
- jenkin swindows启动,在Windows上启动/停止并重新启动Jenkins服务
- Substance 3D Painter 错误求解
- IdentityServer4总结
- 美国高清晕渲地形图分享,每一幅都值得珍藏
- Hadoop启动操作过程及常见错误
- javame j2me开发环境搭建要点,WTK安装。