前端采用uni.request发请求,添加withCredentials
uni.request 调用中设置 withCredentials: true 是必要的,如果您的请求需要携带如Cookies或认证信息等跨域凭证。在 uni-app 中,withCredentials 属性用于此目的。您可以在 uni.request 的配置中添加这个属性。
export const request=(params)=>{
let header={...params.header}
//判断url中是否/my/请求的是私有的路径,需要携带上header token
// #ifdef MP
if(params.url.includes("/my/")){
header["token"] = wx.getStorage("token");
}
// #endif
// #ifdef H5
if(params.url.includes("/")){
header["authorization"] = uni.getStorageSync('token');
}
// #endif
return new Promise((resolve,reject)=>{
uni.request({
...params,
header,
url:baseUrl+params.url,
withCredentials: true, // 在这里设置 withCredentials
success: (result) => {
resolve(result.data)
},
fail:(err)=>{
reject(err)
}
});
})
}
//定义请求根路径
const baseUrl = "http://127.0.0.1:1111"
// const baseUrl = "http://127.0.0.1:8080/api"
// const baseUrl = "http://a85ak178.dongtaiyuming.net"
export const getBaseUrl=()=>{
return baseUrl;
}
Springboot服务端创建配置类
.allowedOriginPatterns(“*”) //允许跨域来源
.allowCredentials(true) //允许
@Configuration
public class WebAppConfigurer implements WebMvcConfigurer {
@Resource
private StringRedisTemplate stringRedisTemplate;
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOriginPatterns("*")
.allowCredentials(true)
.allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE","OPTIONS")
.maxAge(3600);
}
//配置图片磁盘映射
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry){
registry.addResourceHandler("/image/product/**").addResourceLocations("file:"+"D:\\endproject\\ticket_img\\product\\");
registry.addResourceHandler("/image/icon/**").addResourceLocations("file:"+"D:\\endproject\\ticket_img\\icon\\");
registry.addResourceHandler("/image/singer/**").addResourceLocations("file:"+"D:\\endproject\\ticket_img\\singer\\");
registry.addResourceHandler("/image/swiper/**").addResourceLocations("file:"+"D:\\endproject\\ticket_img\\swiper\\");
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
String[] patterns=new String[]{
"/user/**",
"/image/**",
"/adminLogin","/product/**","/bigType/**","/user/wxlogin","/weixinpay/**"
};
registry.addInterceptor(new LoginInterceptor(stringRedisTemplate))
.addPathPatterns("/**")
.excludePathPatterns(patterns);
}
}
由于我这里配置了拦截器,
当 preHandle 返回 false 时,请求将被立即终止,后续的任何处理器(包括那些负责添加 CORS 响应头的处理器)都不会被执行。
如果预检(OPTIONS)请求被拦截器阻止,那么浏览器将不会收到包含 Access-Control-Allow-Origin 的响应,从而导致 CORS 错误。
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (request.getMethod().equals(HttpMethod.OPTIONS.name())){
return true;
}