SpringMVC跨域问题

Posted xiaozhizxj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringMVC跨域问题相关的知识,希望对你有一定的参考价值。

SpringMVC跨域问题

1.@CrossOrigin注解

Spring 从4.2版本后开始支持 @CrossOrigin 注解实现跨域

  1. String[] origins: 允许来源域名的列表,例如 \'www.jd.com\',匹配的域名是跨域预请求 Response 头中的 \'Access-Control-Aloow_origin\' 字段值。不设置确切值时默认支持所有域名跨域访问。
  2. String[] allowedHeaders: 跨域请求中允许的请求头中的字段类型, 该值对应跨域预请求 Response 头中的 \'Access-Control-Allow-Headers\' 字段值。 不设置确切值默认支持所有的header字段(Cache-Controller、Content-Language、Content-Type、Expires、Last-Modified、Pragma)跨域访问。
  3. String[] exposedHeaders: 跨域请求请求头中允许携带的除Cache-Controller、Content-Language、Content-Type、Expires、Last-Modified、Pragma这六个基本字段之外的其他字段信息,对应的是跨域请求 Response 头中的 \'Access-control-Expose-Headers\'字段值。
  4. RequestMethod[] methods: 跨域HTTP请求中支持的HTTP请求类型(GET、POST...),不指定确切值时默认与 Controller 方法中的 methods 字段保持一致。
  5. String allowCredentials: 该值对应的是是跨域请求 Response 头中的 \'Access-Control-Allow-Credentials\' 字段值。浏览器是否将本域名下的 cookie 信息携带至跨域服务器中。默认携带至跨域服务器中,但要实现 cookie 共享还需要前端在 AJAX 请求中打开 withCredentials 属性。
  6. long maxAge: 该值对应的是是跨域请求 Response 头中的 \'Access-Control-Max-Age\' 字段值,表示预检请求响应的缓存持续的最大时间,目的是减少浏览器预检请求/响应交互的数量。默认值1800s。设置了该值后,浏览器将在设置值的时间段内对该跨域请求不再发起预请求。

2.注解的方式允许跨域

该类都允许跨域

@RestController
@CrossOrigin
public class HController {
}

该方法允许跨域

	@RequestMapping(value = "/hello")
    @CrossOrigin
    public String Hello(Model model){
        model.addAttribute("msg","hello");
        return "hello";
    }

2.配置springmvc文件实现全局允许跨域

<!--    设置全局都支持跨域-->
    <mvc:cors>
        <mvc:mapping path="/**"/>
    </mvc:cors>

3.配置 web.xml 文件实现全局允许跨域

 <filter-mapping>
        <filter-name>CorsFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

以上是关于SpringMVC跨域问题的主要内容,如果未能解决你的问题,请参考以下文章

最全面的SpringMVC教程——跨域问题

SpringMvc CORS跨域设置

SpringMVC--12 跨域问题

SpringMVC--12 跨域问题

SpringMVC--12 跨域问题

SpringMVC--12 跨域问题