JWT密钥必须是Base64解码后≥32字节的合法密钥,验证时须显式指定签名算法并阻断失败请求流,且jjwt-api与jjwt-impl版本必须严格一致。
JWT生成时密钥必须是Base64编码的SecretKey,不能直接用字符串
很多人用
,结果报
。这是因为
要求输入的byte数组长度必须符合HMAC算法要求(如HS256需≥256位=32字节),而"my-secret"只有10字节。
正确做法是用
生成合规密钥,或手动构造Base64编码的32字节密钥:
推荐:用
,确保secret是合法Base64字符串且解码后长度≥32字节
开发阶段可临时用
生成随机密钥,但别硬编码进代码
Spring Boot中建议配置
,再在代码里
解析
验证JWT时要显式指定签名算法,否则默认只认HS256
如果Token是用
(ECDSA)签发的,但验证时没指定算法,
会直接抛
。
必须用
+
双保险:
立即学习
“
Java免费学习笔记(深入)
”;
HS系列:用
RS/ES系列:需先加载公钥,再用
生产环境别依赖
的自动算法推断——它不安全也不可靠
Spring过滤器中验证失败要提前return,不能继续chain.doFilter
常见错误是在
里验证JWT失败后只打印日志、设置响应状态码,却忘了
,导致请求仍进入后续拦截器甚至Controller,造成越权访问。
Eclipse导入Android或其他的JAVA项目的正确方法 WORD版
本文档主要讲述的是Eclipse导入Android或其他的JAVA项目的正确方法;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
下载
标准拦截逻辑必须阻断执行流:
调用
后立即
不要用
包裹在try-catch里“兜底”——异常不该是控制流程的手段
如果用了
,记得重写
跳过静态资源路径,避免对
或
也校验Token
jjwt-api和jjwt-impl版本必须严格一致,否则ClassCastException频发
比如
+
混合使用,解析Token时可能抛
——这是典型的SPI实现类不匹配。
Maven依赖必须锁死同一版本:
用BOM管理:引入
并声明
scope
手动声明时,三个核心模块
、
、
(或
)版本号必须完全相同
特别注意:Spring Boot 2.6+默认带的
版本较老,要显式排除父POM传递依赖
JWT本身不加密payload,敏感字段别往
里塞;时间戳校验(
/
)默认开启,但时钟偏移需用
微调;这些细节不写进过滤器逻辑,上线后就只能靠日志猜问题。
Keys.hmacShaKeyFor("my-secret".getBytes())InvalidKeyException: Invalid key lengthhmacShaKeyForMacProvider.generateKey()Keys.hmacShaKeyFor(Decoders.BASE64.decode("your-base64-secret=="))MacProvider.generateKey()jwt.secret=base64-encoded-32-byte-keyDecoders.BASE64.decode()ES256Jwts.parserBuilder().build().parseClaimsJws(token)UnsupportedJwtException: Signed JWTs must be parsed using a JWSAlgorithm-specific parsersetSigningKeyrequireAlgorithm.setSigningKey(key).requireAlgorithm(SignatureAlgorithm.HS256).setSigningKey(publicKey).requireAlgorithm(SignatureAlgorithm.RS256)parserBuilder().build()doFilterreturnresponse.setStatus(HttpServletResponse.SC_UNAUTHORIZED)returnchain.doFilter(request, response)OncePerRequestFiltershouldNotFilter/css//favicon.icojjwt-api:0.11.5jjwt-impl:0.11.2java.lang.ClassCastException: io.jsonwebtoken.impl.DefaultJwtParserBuilder cannot be cast to io.jsonwebtoken.JwtParserBuilderjjwt-bomimportjjwt-apijjwt-impljjwt-jacksonjjwt-gsonjjwtclaimsexpnbfsetAllowedClockSkewSeconds