经验分享

【已解决】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,

原创不易,完成人机校验,阅读全文

相关推荐