请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

前后端分离时,每次请求的 SessionId 不一致,导致认证失败

  1. 第一次认证成功后,访问 /me 时 JSESSIONID=BA7C73188883BB6193F76BC8FB602446
  2. 然后第一次访问订单请求 /api/order/orders/1 RequestHeaders 里 Cookie JSESSIONID=BA7C73188883BB6193F76BC8FB602446,请求成功;ResponseHeaders会重新set-cookie: JSESSIONID=7A73016784EF761FA23BABDB32C7770B; Path=/; HttpOnly
  3. 第二次访问订单请求 /api/order/orders/1 RequestHeaders 里 Cookie JSESSIONID=7A73016784EF761FA23BABDB32C7770B,请求失败;ResponseHeaders会重新set-cookie: JSESSIONID=5A52D9A2E379568809DE8C2A3B2C6626; Path=/; HttpOnly

图片描述
图片描述
图片描述

我前端用vue实现的,认证成功后,第一次请求订单服务携带的JSESSIONID是能在后端中找到对应session的,可以请求成功,但是请求成功后response会重新setCookie,JSESSIONID是一个新的值,导致第二次请求订单服务的时候携带的JSESSIONID在后端找不到对应的session,就没有session里面的token,网关token校验的时候就失败了。
图片描述
我在admin后端,加了一个CorsFilter 处理跨域的请求。但是还是一个,每次请求都会生成一个新的SessionID,Vue前端 axios.defaults.withCredentials = true也设置了跨域的。

请老师帮忙看看怎么回事?

正在回答 回答被采纳积分+3

1回答

JoJo 2019-12-11 17:22:45

spring security有个默认的防止session固定攻击的设置,在配置里关掉试一下,见下图

https://img1.sycdn.imooc.com//szimg/5df0b56109fd6df007250035.jpg

0 回复 有任何疑惑可以回复我~
  • 提问者 岁月丶如歌 #1
    老师,我在认证服务器加了这行配置,还是没有用。
    .sessionManagement().sessionFixation().changeSessionId().disable()
    我看到responseheader里面有网关限流的信息,那个set-cookie不知道是什么地方设置的,就是这里重新set-cookie的值出了问题,如果我手动把cookie里的sessionid值修改为第一次请求订单api时的值就可以认证成功然后访问订单服务。
    回复 有任何疑惑可以回复我~ 2019-12-12 10:20:53
  • 提问者 岁月丶如歌 #2
    老师,是不是网关zuul那里出了问题?涉及到路由转发的我也配置了
    sensitive-headers:
    好像是因为产生了新的session,然后响应的时候就把新的sessionid写到cookie里了
    回复 有任何疑惑可以回复我~ 2019-12-12 10:45:15
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信