踩坑记录搭建SpringCloud项目时,使用vue把存在本地的token发送到后端,经过gateway网关出现的跨域问题

Posted Code_BinBin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了踩坑记录搭建SpringCloud项目时,使用vue把存在本地的token发送到后端,经过gateway网关出现的跨域问题相关的知识,希望对你有一定的参考价值。

下学期就要大四了,本人现在在南通实训,本来学校是打算去中山的,但是中山出现了疫情,所以我们就去了南通,我们知道南通在江苏,现在江苏也爆发了疫情。。。


本来疫情没有爆发的时候,我们是在教室上课的,现在疫情爆发了,就在寝室里面上网课。。没错,我们现在就在寝室上网课,教ssm什么的,我也没怎么听,我就想那就趁着这段时间把毕业设计做完,早点答辩完,早点去实习。

我的毕业设计是自己拟题的,就打算把之前自己做的论坛拆分成微服务,然后用上最近学的一些东西,比如设计模式,mongodb什么的,然后我在验证token的时候就出现了一个大问题,我一开始是这么做的。

在浏览器存好token

在vue的main.js里面写一段代码,当检查到本地有token的时候就把token放到请求头里面

if (window.localStorage.getItem("token")) 
  // Axios.defaults.headers.common["Authorization"] = window.localStorage.getItem("token")

  Axios.defaults.headers.common["token"] = window.localStorage.getItem("token")



然后在gatewey的模块下面写好过滤器,我这里只是想测试一下是否能获取到token,所以没有写业务逻辑

package com.znb.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.http.HttpHeaders;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

import java.util.List;

@Configuration
@Slf4j
public class CustomGlobalFilter implements GlobalFilter, Ordered 

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) 

        log.info("进入自定义的filter");

        String token = exchange.getRequest().getHeaders().getFirst("token");
        String requestUrl = exchange.getRequest().getPath().toString();
        System.out.println(token);
        System.out.println(requestUrl);
        if(JudUrl(requestUrl))
            log.info("访问路径是"+requestUrl+"此路径不需要判断token");
            return chain.filter(exchange);
        else 
            log.info("非法用户,拒绝访问!!!");
            return exchange.getResponse().setComplete();
        

    

    @Override
    public int getOrder()   //filter 数字越小filter越先执行
        return -1;           //-1  最先执行
    

    /**
     * 过滤地址
     * @param requestUrl
     * @return
     */
    public boolean JudUrl(String requestUrl)
        if (requestUrl.contains("/user/findblogbypage")
                ||requestUrl.contains("/user/findblogbyblogtypeid")
                )
            return true;
        else 
            return false;
        
    




然后发出请求,报错

这个错误我搞了很久,首先是在gateway的配置文件下面写好跨域的配置,但是完全没有用,然后我又开始写各种config,但是好像也没有用,一直是跨域问题,后面我一想,我好像在user模块的usercontroller里面写了一个跨域注释@CrossOrigin(origins = “*”,maxAge = 3600),我记得,这个会影响到网关的配置,于是我重新写了一config,然后把CrossOrigin给注释掉,配置文件如下

package com.znb.config;


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;
import org.springframework.web.util.pattern.PathPatternParser;

/**
 * created with IDEA.
 *
 * @Author:wqz
 * @Date:2020-01-09
 * @Description:Mult_AdPlatform
 */
@Configuration
public class CorsConfig 
    @Bean
    public CorsWebFilter corsWebFilter()
        CorsConfiguration config=new CorsConfiguration();
        config.setAllowCredentials(true);
        config.addAllowedMethod("*");
        config.addAllowedOrigin("*");
        config.addAllowedHeader("*");
        //设置预检请求的缓存时间(秒),在这个时间段里,对于相同的跨域请求不会再预检了
        config.setMaxAge(18000L);
        UrlBasedCorsConfigurationSource source=new UrlBasedCorsConfigurationSource(new PathPatternParser());
        source.registerCorsConfiguration("/**",config);
        return new CorsWebFilter(source);
    


然后次试一下,问题解决了,这个bug也不是多难的bug,但是也搞了我很多时间,说到底还是基础不牢固吧,还是继续加油吧,现在疫情期间还是要好好搞学习,好了,准备睡觉了。

以上是关于踩坑记录搭建SpringCloud项目时,使用vue把存在本地的token发送到后端,经过gateway网关出现的跨域问题的主要内容,如果未能解决你的问题,请参考以下文章

踩坑记录搭建SpringCloud项目时,使用vue把存在本地的token发送到后端,经过gateway网关出现的跨域问题

踩坑记录搭建SpringCloud项目时,使用vue把存在本地的token发送到后端,经过gateway网关出现的跨域问题

深入浅出SpringCloud原理及实战「SpringCloud-Alibaba系列」微服务模式搭建系统基础架构实战指南及版本规划踩坑分析

SpringCloud - Feign 调用服务及传递参数踩坑记录

SpringCloud踩坑

Vue踩坑记录册