关于解决Springboot跨域请求的方法

时间:2023-03-10 08:21:26
关于解决Springboot跨域请求的方法

前言

最近在项目中,由于前后分离,前台项目和后台项目部署的不在一台服务器,就产生了跨域的问题,特此记录下


正文

正常情况下,如果提示:

关于解决Springboot跨域请求的方法

就可以判断是没有解决跨域的问题了。

在SSM中,我曾经这样解决过:

在springmvc的配置文件中添加如下代码:
<mvc:cors>
<mvc:mapping path="/**"
allowed-origins="*"
allowed-methods="POST, GET, OPTIONS, DELETE, PUT"
allowed-headers="Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With"
allow-credentials="true" />
</mvc:cors>

在springboot中,可以如下实现功能:

创建一个配置类,继承 WebMvcConfigurerAdapter,实现跨域映射即可

@Configuration
public class WebAppConfig extends WebMvcConfigurerAdapter {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**");
}
}

到此已经可以解决跨域问题了!


需要注意的是

在springboot中,如果想要更加详细的控制跨域的请求的话有也可以对上面的方法进行细化控制,如下:

@Configuration
public class WebAppConfig extends WebMvcConfigurerAdapter {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")        //可以跨域访问的路径
.allowedOrigins("http://192.168.1.97") //允许访问的ip
.allowedMethods("GET", "POST")      //允许的方法
.allowCredentials(false).maxAge(3600); //用户证书验证,最大过期时间
}
}

当然,如果你需要更加详细的控制跨域问题,那么可以在每个controller上进行设置并控制跨域(需要特别注意的是:必须指定方法,也就是methods ={RequestMethod.POST,RequestMethod.GET})

@Api(value = "user", tags = "用户管理")
@RestController("managerUser")
@RequestMapping(value = "user")
@CrossOrigin(origins = "http://192.168.1.97:8080", maxAge = 3600,methods = {RequestMethod.POST,RequestMethod.GET})
public class UserController {}

如果你需要更加详细的跨域控制,可以在方法上进行设置

@RequestMapping(value = "AuditedUnitManager",method = RequestMethod.POST)
@CrossOrigin(origins = "http://192.168.1.97:8080", maxAge = 3600)
public Map<String, Object> managerLogin() {}

2018-07-30更新:

目前项目跨域问题已经解决,但是前后分离的项目会导致一种情况:跨域会引起项目session的丢失,目前正在解决这个问题。晚点更新解决方案。