现象:Spring boot验证码接口与登录接口的sessionid不一致
解决方法:
WebConfig中添加如下代码:
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS")
.allowCredentials(true)
.maxAge(3600)
.allowedHeaders("*");
}
WebConfig完整代码如下:
@Slf4j
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
}
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS")
.allowCredentials(true)
.maxAge(3600)
.allowedHeaders("*");
}
}
前端在ajax中添加对应代码如下
xhrFields: {
withCredentials: true
}
ajax完整代码如下:
login: function (event) {
var data = "username="+vm.username+"&password="+vm.password+"&captcha="+vm.captcha;
$.ajax({
type: "POST",
url: "http://localhost:8085/cast_lbs/user/login",
data: data,
dataType: "json",
success: function(result){
if(result.code == 0){//登录成功
parent.location.href ='index.html';
}else{
vm.error = true;
vm.errorMsg = result.msg;
vm.refreshCode();
}
},
xhrFields: {
withCredentials: true
}
});
}
相关原理参考:阮一峰的网络日志->跨域资源共享 CORS 详解 http://www.ruanyifeng.com/blog/2016/04/cors.html