You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot中JWT验证过滤器内if语句无法正常生效的问题

问题解决:JWT角色判断总是进入else分支

你的问题核心是字符串比较方式错误:Java中==用于比较字符串时,判断的是两个字符串对象的内存引用是否一致,而非内容是否相同。哪怕role的内容看起来是"seller",只要它和字面量"seller"不是同一个对象引用,==就会返回false,直接触发else分支。

修复代码

将判断条件中的==替换为equals()方法,同时为避免role为null时触发空指针异常,建议用字面量调用equals():

// 原代码
if(role=="seller") {
// 修改后
if("seller".equals(role)) {

额外验证与建议

  1. 可以通过打印哈希码确认引用差异:
System.out.println(role + " | 哈希码:" + role.hashCode());
System.out.println("seller | 哈希码:" + "seller".hashCode());

如果哈希码相同但==仍不成立,说明解析出的role是新的字符串对象,进一步验证必须用equals()比较内容。
2. 确认JWT生成时,存入的"role"声明确实是字符串类型的"seller",避免因类型不匹配导致解析结果不符合预期。

内容的提问来源于stack exchange,提问作者Thava Bruntha Kovaruthkumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 03:10:03