如何在浏览器中正确传递 JWT Token 到 Spring Boot 后端

胖芳君_3523

胖芳君_3523

2026-10-31

942人浏览

原创

如何在浏览器中正确传递 JWT Token 到 Spring Boot 后端

本文详解前端 html 页面如何可靠地将 jwt token(存储于 cookie)发送至后端,并解决因请求顺序、token 读取位置错误导致的 403 访问拒绝问题。核心在于:后端过滤器需从 cookie 而非 authorization 请求头读取 token,尤其当页面首次加载时。

本文详解前端 html 页面如何可靠地将 jwt token(存储于 cookie)发送至后端,并解决因请求顺序、token 读取位置错误导致的 403 访问拒绝问题。核心在于:后端过滤器需从 cookie 而非 authorization 请求头读取 token,尤其当页面首次加载时。

在典型的前后端分离或服务端渲染混合场景中,浏览器首次访问 /admin_office 这类受保护页面时,会触发两次关键请求:

  1. HTML 文档请求(GET /admin_office):浏览器直接向服务器请求该路径的 HTML 内容;此时若后端安全过滤器仅检查 Authorization: Bearer 请求头,而 Token 实际以 Cookie(如 JWT_TOKEN=xxx)形式存在,则必然读取为 null → 触发 403;
  2. 页面内脚本发起的 API 请求(如 fetch('/admin_office')):此时 JavaScript 手动读取 Cookie 并显式设置 Authorization 头,后端才可成功解析。

你日志中出现三次过滤器调用,正是这一流程的体现:第一次是 HTML 请求(无 Authorization 头,Cookie 未被读取)、第二次是脚本发起的 fetch 请求(手动带了头)、第三次可能是资源预加载或重复请求。而真正决定页面能否渲染的是第一次 HTML 请求的鉴权结果——它必须成功,否则用户根本看不到页面内容。

✅ 正确做法:后端过滤器应优先从 Cookie 中提取 JWT Token,兼容“页面直访”场景。以下是 Spring Boot 中 JWTTokenConfig 过滤器的关键修复代码:

Token Optimizer Pro
Token Optimizer Pro

智能体 Token 使用优化器。输入使用日志、对话片段、模型账单或运行时追踪数据;输出 Token/成本明细、冗余模式、上下文压缩建议……

下载
@Override
protected void doFilterInternal(HttpServletRequest request, 
                                HttpServletResponse response, 
                                FilterChain filterChain) throws IOException, ServletException {
    String authHeader = null;

    // ✅ 优先尝试从 Cookie 中读取 JWT_TOKEN
    Cookie[] cookies = request.getCookies();
    if (cookies != null) {
        authHeader = Arrays.stream(cookies)
                .filter(cookie -> "JWT_TOKEN".equals(cookie.getName()))
                .findAny()
                .map(cookie -> "Bearer " + cookie.getValue()) // 统一格式,便于后续解析
                .orElse(null);
    }

    // ⚠️ 备用:仍支持从 Authorization Header 读取(兼容 API 调用)
    if (authHeader == null) {
        authHeader = request.getHeader("Authorization");
    }

    logger.info("Jwt Token: {}", authHeader);

    if (authHeader != null && authHeader.startsWith("Bearer ")) {
        String token = authHeader.substring(7).trim();
        try {
            // 解析 token、校验签名、提取用户信息与角色...
            String username = jwtService.extractUsername(token);
            List<string> roles = jwtService.extractRoles(token);
            // 构建 Authentication 并存入 SecurityContext...
        } catch (Exception e) {
            logger.warn("Invalid JWT token", e);
        }
    }

    filterChain.doFilter(request, response);
}</string>

? 重要注意事项:

  • Cookie 安全属性:确保 JWT_TOKEN Cookie 设置了 HttpOnly=false(否则 JS 无法读取,但此处后端读取不受影响),同时建议启用 Secure(仅 HTTPS 传输)和 SameSite=Strict/Lax 防 CSRF;
  • 前端无需主动 fetch:修复后端后,浏览器直接访问 /admin_office 即可完成鉴权并返回 HTML,无需再依赖 <script></script> 中的 fetch() —— 该逻辑可移除或仅用于后续 AJAX 数据请求;
  • 避免重复鉴权:若使用 Spring Security,建议将该过滤器置于 UsernamePasswordAuthenticationFilter 之前,并确保不与 BearerTokenAuthenticationFilter 冲突;
  • 调试技巧:在过滤器开头添加 logger.debug("Request URI: {}, Method: {}, Cookies: {}", request.getRequestURI(), request.getMethod(), Arrays.toString(request.getCookies())); 可快速定位 Token 来源。

总结:JWT 的传递方式必须与实际存储机制严格匹配。当 Token 存于 Cookie 时,后端守门员(Filter)必须“低头看 Cookie”,而非只“抬头看 Header”。这一微小调整,即可让受保护页面实现真正的无缝访问与安全兜底。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

浏览器 spring boot token

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2763

5

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6930

13

后端的主要工作内容介绍
后端的主要工作内容介绍

后端是应用程序的服务端部分,负责核心任务,如数据库交互、业务逻辑处理和响应客户端请求。想了解更多后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6426

10

html版权符号
html版权符号

html版权符号是“©”,可以在html源文件中直接输入或者从word中复制粘贴过来,php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.14

6895

7

html在线编辑器
html在线编辑器

html在线编辑器是用于在线编辑的工具,编辑的内容是基于HTML的文档。它经常被应用于留言板留言、论坛发贴、Blog编写日志或等需要用户输入普通HTML的地方,是Web应用的常用模块之一。php中文网为大家带来了html在线编辑器的相关教程、以及相关文章等内容,供大家免费下载使用。

2023.06.21

3812

4

html网页制作
html网页制作

html网页制作是指使用超文本标记语言来设计和创建网页的过程,html是一种标记语言,它使用标记来描述文档结构和语义,并定义了网页中的各种元素和内容的呈现方式。本专题为大家提供html网页制作的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.31

3490

5

html空格
html空格

html空格是一种用于在网页中添加间隔和对齐文本的特殊字符,被用于在网页中插入额外的空间,以改变元素之间的排列和对齐方式。本专题为大家提供html空格的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.01

3499

5

html是什么
html是什么

HTML是一种标准标记语言,用于创建和呈现网页的结构和内容,是互联网发展的基石,为网页开发提供了丰富的功能和灵活性。本专题为大家提供html相关的各种文章、以及下载和课程。

2023.08.11

5079

6

html字体大小怎么设置
html字体大小怎么设置

在网页设计中,字体大小的选择是至关重要的。合理的字体大小不仅可以提升网页的可读性,还能够影响用户对网页整体布局的感知。php中文网将介绍一些常用的方法和技巧,帮助您在HTML中设置合适的字体大小。

2023.08.11

3441

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程