Springboot+vue跨域+登录拦截问题,前端获取不到session,每次请求sessionid变化

这篇具有很好参考价值的文章主要介绍了Springboot+vue跨域+登录拦截问题,前端获取不到session,每次请求sessionid变化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

折磨了整整两天,终于把这个问题搞定了.

一开始后端开发完后,用apifox所有接口测试都是可以的,但当前端跑起来后发现接收不到后端的数据.

网上查了很多方法,首先试了查到的前端代理方法

vue sessionid一直在变,spring boot,vue

没用,代理配置了但api不会替换成设置好的代理,还是以字符串形式到相对路径上.

于是找了后端的办法,

@CrossOrigin(origin = "*")

配置了cros后,前端能成功接受到数据,本以为皆大欢喜了,但是后端做了登录拦截后,发现所有拦截的页面都报跨域错误,而取消拦截后正常.

为了解决这个问题,狠狠的恶补了浏览器相关方面的知识,发现虽然访问了页面,获得了数据,但访问前端的网址,浏览器里并没有cookie记录以及session记录,得出结果,问题在于登录上.

在后端进行了测试,发现能成功登录,并将数据保存到session里.

又直接用浏览器访问后端网址,发现浏览器能获得cookie,得出结论问题出在前端,前端请求后端但却没获得cookie保存sessionid.

后来又尝试这样设置,发现没有效果

@CrossOrigin(originPatterns = "http://localhost:5173/",allowCredentials = "true",allowedHeaders = "true")

于是在后端做了修改,把后端得到的sessionid作为返回值返回给前端,让前端请求时带上cookie的请求头,测试后发现不行,浏览器已经禁止前端使用header.

在f12的network中仔细排查后发现,默认的主页虽然获取到了信息,但是没cookie记录,而每点一次登录,登录的请求头中的cookie存的sessionid都不一样.

查询相关知识后知道,浏览器第一次访问时会获得sessionid存在cookie中,后续访问如果有sessionid存着,会直接用.

于是问题就很清楚了,原因还是在于浏览器不能把返回的sessionid存在cookie中.

然后又经过多次研究,最终还是解决了这个问题,下面把方案放上来,

首先是前端,在vue的main.js中加上这个

axios.defaults.withCredentials = true;

然后是后端,这个配置类一方面用来实现cors跨域,注意,setallowedorigin这个绝对不能写"*",不然会报错

另一方面是corsfilter,这个会先于拦截器执行,解决跨域问题

package com.zjgsu.crazyshopping.controller.conf;


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;


@Configuration
public class CorsConfig {
    private CorsConfiguration corsConfig(){
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.addAllowedHeader("*"); //允许所有域名访问
        corsConfiguration.addAllowedMethod("*"); //允许所有请求头
        corsConfiguration.setAllowCredentials(true);
        corsConfiguration.addAllowedOrigin("http://localhost:5173/"); //允许所有的请求类型
        corsConfiguration.setMaxAge(3600L);
        return corsConfiguration;
    }
    @Bean
    public CorsFilter corsFilter(){
        //存储request与跨域配置信息的容器,基于url的映射
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**",corsConfig());
        return new CorsFilter(source);
    }

}

 文章来源地址https://www.toymoban.com/news/detail-804251.html

到了这里,关于Springboot+vue跨域+登录拦截问题,前端获取不到session,每次请求sessionid变化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • springboot在自定义拦截器中使用@Value获取值失败及@RefreshScope 不生效问题

    @RefreshScope注解用于标识在服务配置中心配置更新时,当前 Bean 需要重新注入以获取最新的配置值。但是在这段代码中,@RefreshScope注解标注在拦截器类上,并不会使拦截器实例重新注入。 通常情况下,拦截器是在应用程序启动时由 Spring Framework 实例化和初始化的,而不是在请

    2024年02月04日
    浏览(33)
  • Springboot获取不到nacos配置中心的配置问题

    记录一下Springboot获取不到nacos配置中心的配置问题 由于项目使用的nacos老版本,存在风险bug, 需要将nacos升级至2.2.1及以上版本,版本升级完毕之后 启动项目发现项目开始报错,提示dynamic-datasource can not find primary datasource 但是我明明在nacos中已经配置了数据源,还会出现这样的问题

    2024年02月09日
    浏览(35)
  • Springboot项目:解决@Async注解获取不到上下文信息问题

    springboot项目中,需要使用到异步调用某个方法,此时 第一个想到的就是 @Async 注解,但是 发现 方法执行报错了,具体报错如下: 上面日志有点多,其实核心就是这一部分日志: 这块逻辑就是,使用spring底层提供的获取上下文信息的方法。 所以说明 获取不到上下文信息,结

    2024年01月17日
    浏览(31)
  • 若依vue(前后端分离版本)前端获取登录用户id

    1.找到user.js 2.在user.js中找到以下几个地方 属性:state{} 属性:mutations{} 函数:GetInfo() 3.在user.js中添加代码  4.在自己的页面中添加获取id的代码 在该若依的版本中,从下列目录找到,ruoyi-ui-src-store-modules-user.js 属性state在页面中的位置 还有mutations 最后是GetInfo方法 步骤三 到此

    2024年04月12日
    浏览(29)
  • Ruoyi-Vue处理跨域问题、同时请求多个域名接口(前端处理)

    Ruoyi-Vue项目请求不同地址的接口,主要在于处理跨域问题,即vue.config.js文件处理 1. 修改配置文件(.env.development/.env.production) 2. 修改vue.config.js文件 即新增一个代理。部署项目时, 如果使用nginx等代理方式,记得配置VUE_APP_API_SERVICE对应的路径及跳转地址 3. 新建requestNew.js文件

    2024年02月03日
    浏览(30)
  • 写一篇前端Vue怎么获取登录的用户名的博客

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 在前端开发中,获取登录用户的用户名是一项常见的需求。Vue 是一种流行的前端框架,提供了多种方法来获取登

    2024年02月11日
    浏览(35)
  • 前端登录退出:处理Token问题(获取、缓存、失效处理)以及代码实现

    Token是服务端生成的一串字符串,当用户第一次登陆成功后,服务器会生成一个token,并将其返回给客户端。 当用户再次向服务器请求数据时,只需要携带着token请求数据即可,无需再次登陆用户名和密码 目的 通过token做一层数据拦截,可以减少数据库请求次数,减缓服务器

    2024年02月02日
    浏览(25)
  • 记:vite3+vue3+axios前端项目跨域问题解决【前端和服务器nginx配置】

    前言:什么是跨域,网上一搜一大把,所以这里直接跳过,直入主题。 处理方式:不通过后端处理跨域,通过前端+服务器nginx处理。 1.前端涉及处理跨域的必要配置(开发环境、生产环境):vite3、vue3、axios 2.服务器涉及处理跨域的配置(生产环境):nginx【主要用到其配置

    2024年02月01日
    浏览(37)
  • vue2前端使用axios发起post请求,后端(springboot)拿不到值解决办法

    axios封装-我常用的请求头参数  application/json; charset=utf-8 页面登录请求-post 网络请求正常传入参数 后端代码,查看控制台发现都为null,没取到值。 1.尝试将前端post请求改成get,其他都不用变 发现正常取到值,打印输出正常。前端页面正常跳转。 2.后端设置为post请求,前端a

    2024年02月02日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包