Momenta 日常实习一面复盘:从 vscode 到 SpringSecurity token 校验链路怎么讲清楚
1. 从 vscode 断点说起SpringSecurity token 校验链路到底卡在哪面试里被问到「登录怎么完成的」很多人第一反应是背「查库、发 token、下次带 token 不查库」。但面试官真正想听的是token 从浏览器发出来到 SpringSecurity 过滤器链里被解析、校验、放行中间到底经过了哪些类、哪些方法、失败时抛什么异常。我在 vscode 里调试这段链路时最开始也只会看 Controller 有没有进断点后来才发现断点要打在FilterChainProxy和UsernamePasswordAuthenticationFilter上才能看清整条链路。这篇复盘面向正在准备日常实习一面的同学尤其是简历上写了「SpringSecurity token 消息队列」但被追问就卡壳的人。我会把 Momenta 一面里被追问的几个点拆开token 存哪、传输安不安全、过滤链怎么配、vscode 里怎么打断点验证、以及本地怎么用统一的 Key/API 通道复现请求把「我做过」讲成「我讲得清楚」。先说结论面试官问「token 会不会不安全」不是要你背 JWT 签名算法而是想看你能不能把存储位置、传输通道、校验时机三件事分开说。存储位置决定 XSS 风险传输通道决定是否需要 HTTPS校验时机决定过滤器链里哪个 Filter 生效。这三件事在 vscode 里都能通过断点看到实际执行顺序比背八股有用得多。我当时的回答只说了「token 存在浏览器缓存里可能不安全」这属于只答了存储位置漏了传输和校验。正确的展开方式是token 一般放 localStorage 或 CookielocalStorage 容易被 XSS 读取Cookie 可以设 HttpOnly 降低风险传输过程必须走 HTTPS否则明文 token 在链路上可被截获校验时 SpringSecurity 通过OncePerRequestFilter解析 Authorization 头验签失败直接返回 401。这三层说清楚面试官基本不会再追。下面按「问题场景 → 前置准备 → 可复制配置 → 验证请求 → 报错排查 → 工具入口」的顺序展开每一步都能在 vscode 里跟做。2. TaoToken 前置统一 Key/API 通道本地复现请求不折腾面试复盘时经常需要本地把接口再跑一遍验证「token 校验失败到底返回什么」。如果每个模型、每个服务都单独配 Key环境变量会乱成一团。我现在的做法是用 TaoToken 统一管理 Key 和 API 通道本地调试时只改一个 Base URL请求就能打到统一入口方便复现 401、403 这类校验失败场景。TaoToken 在这里的角色是统一的 API 通道你拿到一个 Key配置好 Base URL就能在本地用 curl 或代码发起请求观察 token 校验链路的行为。它不替代你的 SpringSecurity也不替代 vscode只是让你在复现请求时少配几套环境变量。前置准备分三步。第一步去官网了解通道能力地址是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 页面上有模型对话、Coding Plan、控制台、API Keys、接入文档几个入口。第二步进控制台创建 API Key入口是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 创建后复制保存后面配置里要用。第三步看接入文档确认 Base URL 和请求格式文档入口是 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite API 基础地址是 https://taotoken.net/api 注意这个地址不加 UTM 参数。如果你要验证模型返回可以用模型对话入口 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 如果长期做编码或 Agent 任务看 Coding Plan 入口 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 。Key 管理统一在 API Keys 页面 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 。这里要强调一个面试常被追问的点token 校验和 API Key 是两回事。SpringSecurity 里的 token 是你自己系统签发的用户凭证TaoToken 的 API Key 是你访问模型通道的凭证。面试时不要把这两个混着讲否则面试官会认为你没分清认证和授权。我在 vscode 里调试时会把用户 token 放在请求头Authorization: Bearer user-token把通道 Key 放在环境变量里两者物理隔离排查时一眼能看出是哪个环节失败。配置环境变量时Linux/macOS 用export TAOTOKEN_API_KEY你的KeyWindows PowerShell 用$env:TAOTOKEN_API_KEY你的Key。这样在 vscode 的集成终端里发起请求时直接引用变量不用把 Key 写死在代码里。这一步做完后面验证请求就能直接跑。3. 可复制配置SpringSecurity 过滤链 vscode 调试配置片段这一节给可直接复制的配置。先给 SpringSecurity 的过滤链配置再给 vscode 的launch.json和settings.json片段最后给 TaoToken 通道的请求配置。路径和原文保持一致你按自己项目改包名即可。先看 SpringSecurity 配置类。核心是注册一个OncePerRequestFilter在UsernamePasswordAuthenticationFilter之前执行解析 Authorization 头里的 token校验通过后把Authentication放进SecurityContextHolder。Configuration EnableWebSecurity public class SecurityConfig { private final TokenAuthFilter tokenAuthFilter; public SecurityConfig(TokenAuthFilter tokenAuthFilter) { this.tokenAuthFilter tokenAuthFilter; } Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .csrf(csrf - csrf.disable()) .sessionManagement(sm - sm.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) .authorizeHttpRequests(auth - auth .requestMatchers(/api/auth/login).permitAll() .anyRequest().authenticated() ) .addFilterBefore(tokenAuthFilter, UsernamePasswordAuthenticationFilter.class); return http.build(); } }再看TokenAuthFilter这是面试官最可能追问的类。断点打在这里的doFilterInternal能看到 token 解析和校验的每一步。Component public class TokenAuthFilter extends OncePerRequestFilter { private final JwtUtil jwtUtil; public TokenAuthFilter(JwtUtil jwtUtil) { this.jwtUtil jwtUtil; } Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException { String header request.getHeader(Authorization); if (header null || !header.startsWith(Bearer )) { chain.doFilter(request, response); return; } String token header.substring(7); try { String username jwtUtil.parseUsername(token); UsernamePasswordAuthenticationToken auth new UsernamePasswordAuthenticationToken(username, null, Collections.emptyList()); SecurityContextHolder.getContext().setAuthentication(auth); } catch (JwtException e) { response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); response.getWriter().write({\code\:401,\msg\:\token invalid\}); return; } chain.doFilter(request, response); } }vscode 的launch.json片段用来启动 Spring Boot 并挂载调试器。路径放在项目根目录.vscode/launch.json。{ version: 0.2.0, configurations: [ { type: java, name: Debug SpringBoot, request: launch, mainClass: com.example.TicketApplication, projectName: ticket-system, env: { TAOTOKEN_API_KEY: ${env:TAOTOKEN_API_KEY} } } ] }vscode 的settings.json片段用来在集成终端里自动加载环境变量路径是.vscode/settings.json。{ terminal.integrated.env.linux: { TAOTOKEN_API_KEY: ${env:TAOTOKEN_API_KEY} }, java.debug.settings.hotCodeReplace: auto }TaoToken 通道的请求配置用 curl 验证时直接引用环境变量。Base URL 是 https://taotoken.net/api 注意不加 UTM。curl -X POST https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer ${TAOTOKEN_API_KEY} \ -H Content-Type: application/json \ -d { model: claude-3-5-sonnet, messages: [{role: user, content: 复现 token 校验失败场景}] }如果你用 Claude Code 做本地编码辅助接入时同样需要三件套Base URL、Key、Model ID。Base URL 用 https://taotoken.net/api Key 用控制台创建的 KeyModel ID 按文档里支持的模型填。Claude Code 相关入口是 https://taotoken.net/claude-code?utm_sourcetaotoken_aicg_blog_endutm_contentclaude-codeutm_campaignrewrite Anthropic 兼容入口是 https://taotoken.net/anthropic?utm_sourcetaotoken_aicg_blog_endutm_contentanthropicutm_campaignrewrite 。配置时把这三件套写全缺一个都会报错。配置完成后在 vscode 里按 F5 启动调试断点打在TokenAuthFilter.doFilterInternal第一行。发一个不带 Authorization 头的请求应该直接走到chain.doFilter然后被authorizeHttpRequests拦截返回 403发一个带错误 token 的请求应该进 catch 分支返回 401。这两个结果能对上说明过滤链配置正确。4. 验证请求从 401 到 200把 token 校验链路跑通配置写完必须验证否则面试时说不清「怎么确认它生效了」。这一节给完整的验证步骤每一步都有预期结果。我用 vscode 的 REST Client 插件或 curl 都行下面用 curl 演示方便你直接复制。第一步启动应用。在 vscode 里按 F5控制台看到Started TicketApplication说明启动成功。如果端口被占用改application.yml里的server.port。第二步请求登录接口拿 token。假设登录接口是/api/auth/login请求体带用户名密码。curl -X POST http://localhost:8080/api/auth/login \ -H Content-Type: application/json \ -d {username:test,password:123456}预期返回类似{code:200,token:eyJhbGciOiJIUzI1NiJ9...}。把 token 复制出来存到变量里方便后面用。TOKENeyJhbGciOiJIUzI1NiJ9...第三步不带 token 请求受保护接口验证被拦截。curl -i http://localhost:8080/api/orders预期返回 403 或 401响应体里没有业务数据。这一步对应面试官问的「没 token 会怎样」你能直接说出状态码和拦截位置。第四步带错误 token 请求验证校验失败分支。curl -i http://localhost:8080/api/orders \ -H Authorization: Bearer wrong-token预期返回 401响应体是{code:401,msg:token invalid}。这个响应来自TokenAuthFilter的 catch 分支说明断点打对了位置。第五步带正确 token 请求验证放行。curl -i http://localhost:8080/api/orders \ -H Authorization: Bearer ${TOKEN}预期返回 200 和订单列表。到这一步整条链路就跑通了请求进来 →TokenAuthFilter解析头 → 验签成功 → 放Authentication→FilterChainProxy放行 → Controller 执行。第六步用 TaoToken 通道复现一次模型请求确认通道可用。这一步和 SpringSecurity 无关但面试复盘时经常需要「本地把请求再发一遍」统一通道能省事。curl -X POST https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer ${TAOTOKEN_API_KEY} \ -H Content-Type: application/json \ -d { model: claude-3-5-sonnet, messages: [{role: user, content: 解释 OncePerRequestFilter 执行时机}] }预期返回模型回复。如果返回 401先检查 Key 是否正确如果返回 404检查 Base URL 是否漏了/api。验证过程中vscode 的调试控制台会打印过滤器执行顺序。你可以在FilterChainProxy的doFilter里也打个断点观察TokenAuthFilter和UsernamePasswordAuthenticationFilter的先后。这个顺序就是面试官问「过滤链怎么走」时的标准答案自定义 Filter 在UsernamePasswordAuthenticationFilter之前所以 token 校验先于表单登录执行。把上面六步的结果截图或记下来面试时被问「你怎么验证的」直接说「我打了断点分别测了无 token、错 token、对 token 三种情况状态码分别是 403、401、200」。这比说「我配好了就能用」有说服力得多。5. 本篇常见错排查401、local proxy failed、reading choices、OAuth这一节对照真实报错给排查路径。这些错我在 vscode 调试和 TaoToken 通道请求时都遇到过按顺序排查基本能定位。报错一401 Unauthorized响应体{code:401,msg:token invalid}。这是TokenAuthFilter主动返回的说明 token 解析失败。排查顺序先看请求头是不是Authorization: Bearer token注意 Bearer 后面有一个空格再看 token 是不是过期JWT 的exp字段可以用在线工具解最后看签名密钥是否和签发时一致JwtUtil里的 secret 改过就会验签失败。如果三件套里 Key 写错TaoToken 通道也会返回 401这时检查TAOTOKEN_API_KEY环境变量是否生效在 vscode 终端里echo $TAOTOKEN_API_KEY确认。报错二local proxy failed。这个错通常出现在本地请求经过代理时。排查检查 vscode 的settings.json里有没有配http.proxy如果有但代理不可用请求会失败检查环境变量HTTP_PROXY、HTTPS_PROXY是否指向了不可达地址临时unset掉再试如果用的是公司网络确认是否需要走内网地址。这个错和 token 校验无关但会伪装成「请求发不出去」容易误判。报错三reading choices。这个错一般出现在解析模型返回时代码里读response.choices[0]但返回体结构不对。排查先打印完整响应体确认是不是{error:...}而不是正常的choices数组检查请求的model字段是否是通道支持的模型 ID模型 ID 写错会返回错误结构检查Content-Type是否是application/json。如果用的是 TaoToken 通道模型 ID 按接入文档里的列表填文档入口是 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。报错四OAuth 相关错误。如果你用 Claude Code 或 Anthropic 兼容通道可能会遇到 OAuth 报错。排查确认 Base URL 用的是 https://taotoken.net/api 不要多加路径确认 Key 是从控制台创建的不是临时 token确认三件套Base URL、Key、Model ID都写全缺 Model ID 会报模型不存在。Claude Code 接入入口是 https://taotoken.net/claude-code?utm_sourcetaotoken_aicg_blog_endutm_contentclaude-codeutm_campaignrewrite Anthropic 入口是 https://taotoken.net/anthropic?utm_sourcetaotoken_aicg_blog_endutm_contentanthropicutm_campaignrewrite 按文档里的配置格式填。报错五403 Forbidden但 token 是对的。这说明 token 校验通过了但授权没通过。排查检查authorizeHttpRequests里的路径匹配规则/api/orders是否被anyRequest().authenticated()覆盖检查用户角色是否满足接口要求的权限检查SecurityContextHolder里是否真的放进了Authentication断点看getAuthentication()是否为 null。报错六vscode 断点不生效。排查确认launch.json里的mainClass和实际启动类一致确认断点打在可执行代码行不是注释或空行确认没有开hotCodeReplace导致类没重新加载确认调试器附加的是正确的 JVM 进程。把这几类报错和对应的排查步骤记下来面试时被问「你遇到过什么问题」可以挑一个讲比如「我遇到过 401排查发现是 Bearer 后面少了个空格后来在过滤器里加了日志打印原始头」。这种细节比泛泛而谈更能体现你真的调过。6. 语义一致 CTA把复盘落到可复现的请求上面试复盘最怕的是「当时没答上来事后也没搞懂」。这篇里的过滤链配置、vscode 调试配置、验证步骤你都可以在本地跑一遍把 401、403、200 三种结果亲手复现出来。跑通之后面试官再问「token 校验链路怎么走」你就能从OncePerRequestFilter讲到SecurityContextHolder再讲到FilterChainProxy的放行顺序。如果你需要统一 Key/API 通道来复现请求按场景选入口排障和接入相关看 API Keys 和接入文档API Keys 入口是 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 接入文档入口是 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 验证模型返回用模型对话入口 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 长期做编码或 Agent 任务看 Coding Plan 入口 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 。控制台入口是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 官网是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。最后给一个实用技巧把这篇里的 curl 命令存成verify.sh每次改完过滤链就跑一遍三种情况的结果对上了再提交代码。这样面试时你说「我有一套验证脚本」比说「我本地试过」更可信。

相关新闻

AI协同开发STM32实战:四阶段协作流程与避坑指南

AI协同开发STM32实战:四阶段协作流程与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 1:06:11 阅读更多 →
下一代汽车电子架构与整车硬件平台:从分布式ECU到中央计算

下一代汽车电子架构与整车硬件平台:从分布式ECU到中央计算

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 1:06:11 阅读更多 →
研电赛Arm命题自动驾驶小车全攻略:从硬件选型到PID调参实战

研电赛Arm命题自动驾驶小车全攻略:从硬件选型到PID调参实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 1:06:11 阅读更多 →

最新新闻

如何部署VOSR2-fp16?MLXServeEngine自动下载模型与注册服务完整教程

如何部署VOSR2-fp16?MLXServeEngine自动下载模型与注册服务完整教程

【免费下载链接】VOSR2-fp16 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/VOSR2-fp16 点击查看 免费下载 VOSR2-fp16 是运行在 MLX 上的一步式生成超分辨率模型(fp16 权重)。配合 MLXServeEngine,你可以实现「注…

2026/10/19 1:42:22 阅读更多 →
【重要置顶】最新STM32/51单片机/物联网/SpringBoot/小程序/python/大数据选题推荐

【重要置顶】最新STM32/51单片机/物联网/SpringBoot/小程序/python/大数据选题推荐

联系博主👆👆👆 …上方源码咨…👆👆👆 👆👆👆…上方源码咨…👆👆👆 👆👆👆…上方源码咨…&#x1…

2026/10/19 1:42:22 阅读更多 →
汽车电子硬件设计进阶路线:教材、圈子与实战的闭环

汽车电子硬件设计进阶路线:教材、圈子与实战的闭环

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 1:42:22 阅读更多 →
STM32C5与CubeMX2深度解析:从选型到避坑的实战指南

STM32C5与CubeMX2深度解析:从选型到避坑的实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 1:42:22 阅读更多 →
STM32环境检测物联网节点设计:烟雾粉尘噪音采集与WiFi云平台对接

STM32环境检测物联网节点设计:烟雾粉尘噪音采集与WiFi云平台对接

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 1:42:22 阅读更多 →
3 种环境、5 条命令跑通 Biomni:生物医学 AI 智能体部署指南

3 种环境、5 条命令跑通 Biomni:生物医学 AI 智能体部署指南

3 种环境、5 条命令跑通 Biomni:生物医学 AI 智能体部署指南 【免费下载链接】Biomni Biomni: a general-purpose biomedical AI agent 项目地址: https://gitcode.com/GitHub_Trending/bi/Biomni Biomni 是一个通用生物医学 AI 智能体:LLM 负责推…

2026/10/19 1:41:21 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →