spring boot升级到2.0后发现继承WebMvcConfigurerAdapter实现跨域过时了,那我们就紧随潮流
首先web项目中支持跨域需要新增代码如下:
Spring Boot 2.0之前解决跨域
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
/**
* @program: AK
* @description: 跨域请求
* @author: Mr.Liu
* @create: 2018-08-10 15:29
*/
@Configuration
public class CorsConfig extends WebMvcConfigurerAdapter {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowCredentials(true)
.allowedMethods("*")
.maxAge(3600);
}
}
Spring Boot 2.0之后跨域解决
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @program: AK
* @description: 跨域请求
* @author: Mr.Liu
* @create: 2018-08-10 15:29
**/
@Configuration
@EnableWebMvc
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
//设置允许跨域的路径
registry.addMapping("/**")
//设置允许跨域请求的域名
.allowedOrigins("*")
//是否允许证书 不再默认开启
.allowCredentials(true)
//设置允许的方法
.allowedMethods("*")
//跨域允许时间
.maxAge(3600);
}
}
局部配置示例
主要使用@CrossOrigin 注解,全局的配置 在@CrossOrigin里依旧可用
可以注解在单个方法上
@RestController
@RequestMapping(/account)
public class AccountController {
@CrossOrigin
@GetMapping(/{id})
public Account retrieve(@PathVariable Long id) {
}
@DeleteMapping(/{id})
public void remove(@PathVariable Long id) {
}
也可以注解在整个controller上
@CrossOrigin(origins = http://domain2.com, maxAge = 3600)
@RestController
@RequestMapping(/account)
public class AccountController {
@GetMapping(/{id})
public Account retrieve(@PathVariable Long id) {
}
@DeleteMapping(/{id})
public void remove(@PathVariable Long id) {
}
}
也可以在整个controller上的同时注解在单个方法上
@CrossOrigin(maxAge = 3600)
@RestController
@RequestMapping(/account)
public class AccountController {
@CrossOrigin(http://domain2.com)
@GetMapping(/{id})
public Account retrieve(@PathVariable Long id) {
}
@DeleteMapping(/{id})
public void remove(@PathVariable Long id) {
}
}