Java Spring boot 2.0 跨域问题的解决

 更新时间:2018年04月28日 16:40:19   作者:低调的小白   我要评论
本篇文章主要介绍了Java Spring boot 2.0 跨域问题的解决,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

跨域

一个资源会发起一个跨域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 脚本以及其它类资源),已经成为了一种普遍且流行的方式。

正如大家所知,出于安全考虑,浏览器会限制脚本中发起的跨站请求。比如,使用 XMLHttpRequest对象发起 HTTP 请求就必须遵守同源策略。 具体而言,Web 应用程序能且只能使用 XMLHttpRequest 对象向其加载的源域名发起 HTTP 请求,而不能向任何其它域名发起请求。为了能开发出更强大、更丰富、更安全的Web应用程序,开发人员渴望着在不丢失安全的前提下,Web 应用技术能越来越强大、越来越丰富。比如,可以使用 XMLHttpRequest 发起跨站 HTTP 请求。(这段描述跨域不准确,跨域并非浏览器限制了发起跨站请求,而是跨站请求可以正常发起,但是返回结果被浏览器拦截了。最好的例子是CSRF跨站攻击原理,请求是发送到了后端服务器无论是否跨域!注意:有些浏览器不允许从HTTPS的域跨域访问HTTP,比如Chrome和Firefox,这些浏览器在请求还未发出的时候就会拦截请求,这是一个特例。)

more:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS

CROS

CORS 全称为 Cross Origin Resource Sharing(跨域资源共享),服务端只需添加相关响应头信息,即可实现客户端发出 AJAX 跨域请求。

@CrossOrigin

1.在Controller上直接使用  Controller上的所有请求都可以跨域 ,origins = "*" 代表所有都能请求

@CrossOrigin(origins ="", maxAge = 3600)
@RestController
@RequestMapping("/account")
public class AccountController {
  @RequestMapping("/{id}")
  public Account retrieve(@PathVariable Long id) {
    // ...
  }
  @RequestMapping(method = RequestMethod.DELETE, path = "/{id}")
  public void remove(@PathVariable Long id) {
    // ...
  }
} 

2. 在方法上使用

@CrossOrigin(maxAge = 3600)
@RestController
@RequestMapping("/account")
public class AccountController {
  @CrossOrigin("http://domain2.com")
  @RequestMapping("/{id}")
  public Account retrieve(@PathVariable Long id) {
    // ...
  }
  @RequestMapping(method = RequestMethod.DELETE, path = "/{id}")
  public void remove(@PathVariable Long id) {
    // ...
  }
}

另一中方法:

CorsFilter  主要目的便是添加相关的信息头,使用Filter也可以实现。

@Configuration
public class BeanConfiguration {
  @Bean
  public CorsFilter corsFilter() {
    final UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();
    final CorsConfiguration corsConfiguration = new CorsConfiguration();
    corsConfiguration.setAllowCredentials(true);
    corsConfiguration.addAllowedOrigin("*");
    corsConfiguration.addAllowedHeader("*");
    corsConfiguration.addAllowedMethod("*");
    urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration);
    return new CorsFilter(urlBasedCorsConfigurationSource);
  }
}

Access-Control-Allow-Origin:允许访问的客户端域名,例如:http://web.xxx.com,若为 *,则表示从任意域都能访问,即不做任何限制。

  1. Access-Control-Allow-Methods:允许访问的方法名,多个方法名用逗号分割,例如:GET,POST,PUT,DELETE,OPTIONS。
  2. Access-Control-Allow-Credentials:是否允许请求带有验证信息,若要获取客户端域下的 cookie 时,需要将其设置为 true。
  3. Access-Control-Allow-Headers:允许服务端访问的客户端请求头,多个请求头用逗号分割,例如:Content-Type。
  4. Access-Control-Expose-Headers:允许客户端访问的服务端响应头,多个响应头用逗号分割。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持澳门金沙网上娱乐。

相关文章

  • 正确遍历删除List中的元素方法(推荐)

    正确遍历删除List中的元素方法(推荐)

    下面小编就为大家带来一篇正确遍历删除List中的元素方法(推荐)。小编觉得挺不错的,在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • java二进制运算基础知识点详解

    java二进制运算基础知识点详解

    在本文里小编给大家分享了关于java二进制运算基础知识点以及实例代码内容,需要的朋友们参考学习下。
    2019-08-08
  • Java语言实现简单FTP软件 FTP软件本地窗口实现(5)

    Java语言实现简单FTP软件 FTP软件本地窗口实现(5)

    这篇文章主要为大家详细介绍了Java语言实现简单FTP软件,FTP软件本地窗口的实现方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • Springboot项目使用拦截器方法详解

    Springboot项目使用拦截器方法详解

    这篇文章主要介绍了Springboot项目使用拦截器方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • java 压缩和解压缩Zip、Jar、Gzip文件实例代码

    java 压缩和解压缩Zip、Jar、Gzip文件实例代码

    本文主要介绍java压缩和解压缩Zip、Jar、Gzip文件的知识,这里整理了相关资料,并附示例代码有兴趣的小伙伴可以参考下
    2016-09-09
  • log4j的配置文件详细解析

    log4j的配置文件详细解析

    以下小编主要为大家介绍一下log4j的配置文件各个配置项的含义。需要的朋友可以过来参考下
    2013-08-08
  • JavaWeb实现文件上传下载功能实例详解

    JavaWeb实现文件上传下载功能实例详解

    这篇文章主要介绍了JavaWeb中的文件上传和下载功能的实现,在开发中,文件上传和下载功能是非常常用的功能,需要的朋友可以参考下
    2016-11-11
  • java判断String类型是否能转换为int的方法

    java判断String类型是否能转换为int的方法

    今天小编就为大家分享一篇java判断String类型是否能转换为int的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Java8深入学习系列(二)函数式编程

    Java8深入学习系列(二)函数式编程

    函数式编程,这个词语由两个名词构成,函数,编程。编程这个词我就不用解释了,大家都是做这个的。函数,其实单独抽离出来这个词语,也并不陌生,那二者组合后的到底是什么呢,下面这篇文章主要给大家介绍了关于Java8函数式编程的相关资料,需要的朋友可以参考下。
    2017-08-08
  • java反射深入剖析(推荐)

    java反射深入剖析(推荐)

    下面小编就为大家带来一篇java反射深入剖析。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-07-07

最新评论