SpringBoot2.5解决跨域问题2021年秋季新方法 SpringBoot+Vue前后端分离解决session不一致的问题
配置后端 (针对springboot2.5)直接在启动类加一个配置
我之前也一直看网上的做法,各种版本不一致,最后我准备放弃了,结果我吃了个饭想到直接去google搜了一下,然后真的发现了新的方法,只能说官方文档还是nb。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @author jerryzhao
*/
@SpringBootApplication
public class SecondKillSpringbootApplication {
public static void main(String[] args) {
SpringApplication.run(SecondKillSpringbootApplication.class, args);
}
// 就是这里,下面就这样写就行了,不用去加一个配置类
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowCredentials(true).allowedOriginPatterns("*");
}
};
}
}
这是Spring的文档,他说大约15分钟能看完,大概能看得懂。就主要盯着代码。
https://spring.io/guides/gs/rest-service-cors/
前端的遇到的坑(我是新手)总结一句话:用localhost和127.0.0.1不好用的话用局域网ip试试
因为我一开始后端是跨域一直解决不了,然后通过了上面的方法解决了跨域,我就认为是前端的问题了。我前端就是加了那一条
import axios from "axios"
和axios.defaults.withCredentials = true
但是发现sessionID还是不一样。心态又崩了,我真的搜了个遍,axios文档都看了也没找到其他的方法。然后我自己写了一个cookie发现确实能发的过去。
然后确实能发的过去,前端也能发的回去,但是那个SESSION就是发不回去。
我的情况是:
(1)localhost后端直接不需要配跨域直接可以跨域,sessionId是否不一致我当时还没解决。
(2)现在用的是127.0.0.1,然后就遇到 cookie中SESSION被无视,自定义的cookie就正常。
(3)然后我换了局域网的IP,我在我爸的Wi-Fi下是192.168.1.101,然后我发现我的vue竟然容纳了SESSION,然后后端接收到的sessionID惊人的一致了。
大家不需要管其他的不一样的,那些是一些实验。
废话:
之前做的项目使用shiro的token做的,现在学会了个更基础一点的。
就是觉得别轻易放弃吧,我本来用的shiro,是被shiro的拦截器给堵死了跨域请求,然后在shiro的拦截器上配置好了,但是sessionId仍然不一样,我就以为是shiro的问题,然后今天重新找了个不用cookie的,结果直接跨域都不好用了,去了官网找的解决方案,然后SESSION又发不过去,最后换了个IP就好了,差点就放弃了,强迫症又回来解决了。