vue+springboot项目,跨域已经解决,但能否成功访问controller具有偶然性,多次刷新就可以成功,是为什么呢?

发布于 2022-09-13 00:03:35 字数 1240 浏览 22 评论 0

项目本身采用vue框架作为前端,springboot作为后端,登陆系统采用了SpringSequrity框架,在登陆验证时添加响应头作为解决跨域的方式。

后端解决跨域问题代码:

 @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
        // 获取token, 并检查登录状态
        SecurityUtils.checkAuthentication(request);
        //
        response.addHeader("Access-Control-Allow-Origin", "*");
        response.addHeader("Access-Control-Allow-Credentials", "true");
        response.addHeader("Access-Control-Allow-Methods", "*");
        response.addHeader("Access-Control-Allow-Headers", "*");
        response.addHeader("Access-Control-Max-Age", "16800");
        chain.doFilter(request, response);
    }

问题一:

在前端打包整合进后端的static下之后,启动后端,第一次登陆时总会报403错误,但是多刷新就好了。


检查成功的请求和非成功的请求,发现报403错误的请求响应头中多了如下两个:

Origin: http://localhost:8001
Content-Length: 0

问题二

在项目使用过程中,多次发生点击一次报403错误,但是多点击几次就成功了,不知道原因是为何?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不离久伴 2022-09-20 00:03:35

我猜哈,可能就是Content-Length: 0的问题,tomcat可能一次性读取到多个请求的数据,又由于http请求的请求体与下一个请求的请求方式是可以连在一起的,所以需要Content-Length去标识这个请求体的具体数据量。如果为0,那么tomcat就不获取请求体了,把上一个的请求体也算作下一个请求的请求方式,那么就可能报错。
image.png

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文