首先,这是一个前后端分离的单体项目
后端用拦截器拦截所有请求并排除了登录注册接口,现在我用前端页面访问后端接口,登录完成之后访问其它接口提示没有登录。但是使用swagger2接口文档没有发现此问题,用户信息通过request.getSession().setAtraubate()保存,登录之后立马输出getAtraubate是有数据的,但是我登录后跳转到另一个前端页面,从这个页面访问其它需要登录后才能访问的接口显示没有登录,也就是说刚刚保存的数据为Null了。奇怪的是用接口文档访问接口没有出现问题,求解决
参考GPT和自己的思路:根据您的描述,推测您可能遇到了前后端分离应用中的 Session 管理问题。在前后端分离应用中,前端通过 Ajax 异步提交数据到后端,后端产生的 Session 信息并不能直接传递给前端,因此需要通过一些特殊的手段维持会话状态。常见的方法是在客户端存储 Session ID,然后在每个 Ajax 请求中携带这个 Session ID,以便后端能够正确地恢复会话信息。
在您的情况下,似乎是在登录之后,保存在 Session 中的数据在前端页面跳转后丢失了,导致后续的接口请求无法识别登录状态。这可能是因为前端在页面跳转时没有正确地维护会话状态,导致新的请求无法正确地携带保存的 Session ID。
解决这个问题的方法有很多,其中一种常见的做法是使用 Token 代替 Session ID,将 Token 存储在客户端的 Cookie 中,在每个 Ajax 请求中携带这个 Token,以便后端能够正确地恢复会话信息。同时,在页面跳转时需要确保 Token 的正确性,并将 Token 回传到新页面,以保证会话状态的正确性。
另外,您提到使用 Swagger 调用接口时没有出现这个问题,可能是因为 Swagger 默认会在每个请求中携带 Session ID,以保证接口调试的正确性。因此,您也可以参考 Swagger 的实现方式,尝试在前端页面中正确地维护会话状态,以解决这个问题。
在前端查看登录接口的返回头中是否有【Set-cookie】字段:如果有 在之后的请求中查看请求是否带上这个Cookie,如果没有,查看登录前的cookie和之后请求的Cookie是否相同