
Sa-Token 前端提交 Bearer 前缀 Token 导致鉴权失败怎么配置 token-prefix【免费下载链接】Sa-Token✨ 开源、免费、一站式 Java 权限认证框架让鉴权变得简单、优雅—— 登录认证、权限认证、分布式 Session 会话、微服务网关鉴权、SSO 单点登录、OAuth2.0 统一认证、jwt 集成、API Key 秘钥授权、API 参数签名项目地址: https://gitcode.com/GitHub_Trending/sa/Sa-Token如果你的前端在提交 Token 时带了Bearer这样的固定前缀例如{ satoken: Bearer xxxx-xxxx-xxxx-xxxx }后端不做任何特殊处理时Sa-Token 会把Bearer视为 Token 的一部分无法正常读取 Token 信息登录校验直接失败抛出NotLoginException未能读取到有效Token。官方排查文档把这种情况列为该异常的可能4前端提交了 Token但是 Token前缀 不对解决办法就是配置token-prefix。这篇文章给出完整的配置方法、Cookie 模式的配套开关和配置生效的验证方式。确认是前缀问题再动手未能读取到有效Token的常见原因不止前缀一种参考 常见问题排查 中对该异常的判断列表先排除其他项可能1前端没有提交 Token最好从前端 F12 控制台看看请求参数里有 Token 吗可能2前端提交了 Token但参数名不对默认参数名是satoken可通过sa-token.token-name: satoken更改可能3配置了框架不读取该来源例如is-read-headerfalse关闭了 header 读取此时从 header 提交 Token 框架就读不到可能4前端提交了 Token但 Token 前缀不对——即本文场景参考 Token 提交前缀可能5前后端分离架构下浏览器默认不自动提交 Cookie参考 前后端分离可能6、可能7Nginx 反向代理吞掉带下划线的自定义 header 名或跨域导致前端提交不上 Token。如果确认前端确实以Bearer开头提交 Token、参数名和读取来源都正常那就是前缀没有配置进入下面的步骤。配置 token-prefix在application.yml中添加sa-token: # 指定 token 提交时的前缀 token-prefix: Bearer如果使用application.properties# token前缀 sa-token.token-prefixBearer配置后Sa-Token 在读取 Token 时会裁剪掉Bearer成功获取xxxx-xxxx-xxxx-xxxx这个真正的 Token 值。一个必须注意的硬约束Token 前缀与 Token 值之间必须有一个空格也就是前端必须提交Bearer xxxx-...而不是Bearerxxxx-...。核心模块中这两个配置项的默认值见 框架配置 的配置项表格tokenPrefix默认null不识别任何前缀cookieAutoFillPrefix默认false。替代方式代码配置如果项目里通过Configuration配置类写 Sa-Token 参数注意两种模式的行为差异见 框架配置模式 1Bean返回SaTokenConfig会覆盖application.yml中的配置模式 2Autowired注入SaTokenConfig后设置参数会与application.yml合并代码配置优先。如果application.yml里已写了token-prefix却不生效先检查项目里是否存在代码配置类把它覆盖掉了。Cookie 模式追加 cookie-auto-fill-prefixCookie中无法存储空格字符所以配置 Token 前缀后Cookie 模式将会失效无法成功提交带有前缀的 token。如果你的项目同时依赖 Cookie 提交 Token需要打开 Cookie 模式自动填充前缀sa-token: # 指定 Cookie 模式下自动填充 token 提交前缀 cookie-auto-fill-prefix: trueproperties 风格# 指定 Cookie 模式下自动填充 token 提交前缀 sa-token.cookie-auto-fill-prefixtrue只用 header / body 提交 Token 的项目不需要这一项。验证配置是否生效常见问题排查 给出的配置生效性判断方法是在启动类的 main 方法里打印框架实际加载到的配置SpringBootApplication public class SaTokenApplication { public static void main(String[] args) { SpringApplication.run(SaTokenApplication.class, args); System.out.println(\n启动成功Sa-Token配置如下 SaManager.getConfig()); } }对比打印结果与application.yml确认tokenPrefix为Bearer以及需要的cookieAutoFillPrefix。若不一致按该文档给出的方向排查项目中存在代码配置覆盖了application.yml中的配置配置文件名字错误SpringBoot 项目正常应为application.yml或application.properties配置前缀或缩进错误正确的写法是以sa-token开头、参数缩进在sa-token之下# 错误示例多加了 spring 前缀 spring: sa-token: token-name: xxx-token # 错误示例缩进不对 sa-token: token-name: xxx-token # 正确的应该是以 sa-token 开头 sa-token: token-name: xxx-token配置确认生效后前端重新提交带Bearer前缀的 Token 请求之前NotLoginException未能读取到有效Token的接口应能通过登录校验——框架读取时裁剪掉的正是Bearer这一段剩余部分即为登录时颁发的 Token。限制小结前缀与 Token 值之间必须有一个空格少空格、多空格都不符合要求中一个空格的约束配置前缀后 Cookie 模式默认失效需cookie-auto-fill-prefix: true补齐存在Bean模式的代码配置时它整体覆盖application.yml改 yml 不解决问题。完整配置项说明可继续在 框架配置 和 Token 提交前缀 两篇文档中查阅。【免费下载链接】Sa-Token✨ 开源、免费、一站式 Java 权限认证框架让鉴权变得简单、优雅—— 登录认证、权限认证、分布式 Session 会话、微服务网关鉴权、SSO 单点登录、OAuth2.0 统一认证、jwt 集成、API Key 秘钥授权、API 参数签名项目地址: https://gitcode.com/GitHub_Trending/sa/Sa-Token创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考