【已解决】Spring Boot解决跨域问题跨域-看这一篇就够了。使用vue+axios+spring boot前后端分离项目时会出现跨域问题怎么解决
本文通过多种方案介绍了解决spring boot跨域问题解决方案
场景描述:
使用vue+axios+spring boot前后端分离项目时会出现跨域问题
解决方案,这里使用了四种方案来解决。分别是:
一: 针对单个接口,使用注解@CrossOrigin
二: 全局配置
三: 自定义跨域过滤器
四:通过Response跨域
五:重写ResponseBodyAdvice
六: 使用nginx反向代理服务器解决跨域问题
下面来详细介绍每种方案的配置:
方案一:针对单个接口,使用注解@CrossOrigin
比如我A接口需要支持跨域,在A接口的类上使用@CrossOrigin(origins = "*",maxAge = 3600)
具体代码:
@RestController
@RequestMapping("/user")
@RequiredArgsConstructor
@CrossOrigin(origins = "*",maxAge = 3600)
public class UserController {
final UserMapper userMapper;
@GetMapping("/getOne/{id}")
public User getOne(@PathVariable("id") Integer id) {
return userMapper.getById(id);
}
}此种方案的优缺点:
优缺点分析此方式虽然虽然实现(跨域)比较简单,但细心的朋友也能发现,使用此方式只能实现局部跨域,当一个项目中存在多个类的话,使用此方式就会比较麻烦(需要给所有类上都添加此注解)。
方案二:全局配置
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration // 一定不要忽略此注解
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**") // 所有接口
.allowCredentials(true) // 是否发送 Cookie
.allowedOriginPatterns("*") // 支持域
.allowedMethods(new String[]{"GET", "POST", "PUT", "DELETE"}) // 支持方法
.allowedHeaders("*")
.exposedHeaders("*");
}
}方案三:自定义跨域过滤器
此实现方式和上一种实现方式类似,它也可以实现全局跨域,它的具体实现代码如下:
3.1:编写filter代码如下:
public class CrosFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,原创不易,完成人机校验,阅读全文