vue axios 前台跨域传cookie到后台中去

本文介绍了一种在Spring Boot应用中实现跨域并允许携带Cookie的方法。通过使用FilterRegistrationBean和CorsConfiguration,可以灵活地配置跨域策略。此外,还介绍了前端如何配合此配置进行请求。

1、后台配置

import org.springframework.boot.web.servlet.FilterRegistrationBean;
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;

/**
 * 1.允许任何域名使用
 * 2.允许任何头
 * 3.允许任何方法(post、get等)
 */
@Configuration
public class CorsConfig {
    private CorsConfiguration buildConfig() {
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.setAllowCredentials(true);
        corsConfiguration.addAllowedOrigin("*"); // 1
        corsConfiguration.addAllowedHeader("*"); // 2
        corsConfiguration.addAllowedMethod("*"); // 3
        corsConfiguration.addExposedHeader("access-token");
        return corsConfiguration;
    }
    @Bean
    public FilterRegistrationBean corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", buildConfig()); // 4
        FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source));
        bean.setOrder(0);
        return bean;
    }
}

为什么要使用FilterRegistrationBean 这种方式而不是用以下这种,因为CorsRegistry的请求地址(也就是allowedOrigin)不能设置为 星号,通常我们都是喜欢将Access-Control-Allow-Origin设置为星号(也就是允许所有地址访问),而上面那种则不能设置,只能一个一个设置,这样就很不舒服,强烈推荐第一种

**
 * @author:LBK
 * @date:2020/7/29 11:40
 * @description:com.kun.blog.config
 */
@Configuration
public class MvcConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowCredentials(false)
                .allowedOrigins("http://localhost:1003")
                .allowedHeaders("*")
                // POST DELETE PUT GET OPTIONS DELETE
                .allowedMethods("POST","DELETE","PUT", "GET","OPTIONS", "DELETE")
                .exposedHeaders("access-token");
    }
}

2、前台配置

在axios请求拦截中设置withCredentials = true(注意一定是要在请求拦截器中配置才能有用)

 service.interceptors.request.use(
  config => {
    config.withCredentials = true
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

注意前台的devserver的代理api服务器一定不要配置不然就是服务器与服务器之间的交互,这样的话前台一定会每次都携带cookie去请求接口这是无法干预的,withCredentials = false都无法关闭这一行为

3、测试

后台请求接口的基本地址(不要用devserver代理服务器,直接访问就是了,因为后台已经跨域了)
在这里插入图片描述
浏览器地址栏
在这里插入图片描述

注意浏览器地址栏上的域和请求接口地址的域一定在一个域上面,只有这样才能将cookie带到请求头中发到后台上去,如果域不同则不会携带cookie

4、最后结果

在这里插入图片描述完结撒花(╹▽╹) 想携带cookie的你,可能是为了想实现记住我这一功能吧 哈哈<( ̄▽ ̄)/

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值