今日在学习过程中,练手的前后端分离项目遇到存在跨域的问题。
问题情况如下:
用户登录接口:
@RestController
@RequestMapping("/sysUser")
@Api(tags = "用户接口")
public class SysUserController {
@PostMapping("/login")
@ApiOperation(value = "用户登录模块",notes = "根据 userLoginDTO 信息进行登录")
public result login(@RequestBody userLoginDTO userLoginDTO){
System.out.println(userLoginDTO);
return result.success();
}
}
从前端发送数据请求
由于前后端的分离,端口的不一致,出现CORS(跨源资源共享)问题。
其中解决CORS方法有两种,一种是 前端 jsonp 处理同源策略等相关的一些配置,另一种就是我们后端的CORS方案处理即可。
我们Java后端又有两种方法来进行处理。
一种是 通过 @CrossOrigin(origins = "http://localhost:8080") 注解作用于相应的controller类或者方法上进行指定允许的跨域操作。
另一种 是 进行指定全局允许跨域操作(一般我们用的是这个)
该全局配置如下:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
@Configuration
public class CorsConfig {
// 当前跨域请求最大有效时长。这里默认1天
private static final long MAX_AGE = 24 * 60 * 60;
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.addAllowedOrigin("*"); // 1 设置访问源地址
corsConfiguration.addAllowedHeader("*"); // 2 设置访问源请求头
corsConfiguration.addAllowedMethod("*"); // 3 设置访问源请求方法
corsConfiguration.setMaxAge(MAX_AGE);
source.registerCorsConfiguration("/**", corsConfiguration); // 4 对接口配置跨域设置
return new CorsFilter(source);
}
}
最后测试: