springboot+vue前后端分离的项目中首页使用轮播图,一段时间后,在运行项目时,图片无法显示,这是什么原因?
运行截图:
代码也没有,控制台错误信息也没😂,看啥子
根据提供的截图来看,似乎是前端访问图片资源时跨域问题造成的。根据参考资料,可以通过后端解决跨域问题的方式解决此问题。具体解决方法如下:
1.在后端项目中新建一个CorsConfig类,实现WebMvcConfigurer接口,并重写其中的addCorsMappings方法。以下是具体代码:
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOriginPatterns("*") //允许跨域请求的域名
.allowCredentials(true) //是否允许发送Cookie信息
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") //允许请求的方式
.maxAge(3600);
}
}
2.在Vue项目中修改axios请求拦截器,增加withCredentials和设置跨域请求的域名,以下是代码示例:
import axios from 'axios'
import store from '@/store'
import router from '@/router'
// 创建axios实例
const Axios = axios.create({
timeout: 10000, // 请求超时时间
headers: {
'Content-Type': 'application/json;charset=UTF-8'
},
});
// http request拦截器
Axios.interceptors.request.use(
config => {
//每次发送请求之前判断是否存在token,如果存在,则统一在http请求的header都加上token
const token = store.state.token;
token && (config.headers.Authorization = token);
//设置跨域请求的域名
config.headers['origin'] = 'http://localhost:8080';
//设置是否允许发送Cookie信息,必须设置为true
config.withCredentials = true;
return config;
},
error => {
return Promise.error(error);
});
// http response拦截器
Axios.interceptors.response.use(
response => {
if (response.data.code === '401' || response.data.code === '403') {
router.replace({
path: '/login',
query: { redirect: router.currentRoute.fullPath }
});
}
return Promise.resolve(response.data);
},
error => {
return Promise.reject(error.response);
});
export default Axios;
以上方法应该能够解决图片无法正常显示的问题。