使SpringMVC支持跨域访问的几种解决方法

前言

由于最近又开始写博客,刚好碰到的开发问题都重新总结一下。

今天在写Controller的时候又想起跨域访问支持的问题,在这里总结一下我以前用过的方法🖊

1. 在Controller类或方法上加入@CrossOrigin注解

@CrossOrigin有两个参数

origins:允许访问的域列表

maxAge:飞行前响应的缓存持续时间的最大年龄(以秒为单位)

1.1. 使方法支持跨域访问

在方法上加@CrossOrigin注解

1
2
3
4
5
6
7

@RequestMapping("/crossDomain2")
@ResponseBody
@CrossOrigin
public String crossDomain2(HttpServletRequest req, HttpServletResponse res, String name){
……
}

1.2. 使Controller类支持跨域访问

在类上添加@CrossOrigin注解

1
2
3
4
5
@Controller  
@CrossOrigin
public class TestController {
……
}

2. 重写WebMvcConfigurerAdapter.addCorsMapping方法

  1. 写一个Conroller的基类Cors,继承WebMvcConfigurerAdapter类,并重写addCorsMappings(CorsRegistry)方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration
public class Cors extends WebMvcConfigurerAdapter {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("GET", "POST", "PUT", "OPTIONS", "DELETE", "PATCH")
.allowCredentials(true).maxAge(3600);
}

}
  1. 实现的Controller继承这个基类Cors
1
2
3
4
@RestController
public class ServerStarter extends Cors { //继承了刚才实现的WebMvcConfigurerAdapter的子类Cors,从而实现支持跨域访问
// 省略具体方法
}

3. 直接拦截在header上加入响应头

1
res.header('Access-Control-Allow-Origin', '*'); //自定义中间件,设置跨域需要的响应头。

本文标题:使SpringMVC支持跨域访问的几种解决方法

文章作者:Aaron.H

发布时间:2018年07月17日 - 20:07

最后更新:2018年09月06日 - 16:09

原始链接:https://uncleaaron.github.io/Blog/JavaWeb/使SpringMVC支持跨域访问的几种解决方法/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。