SpringBoot中JWT验证过滤器内if语句无法正常生效的问题
问题解决:JWT角色判断总是进入else分支
你的问题核心是字符串比较方式错误:Java中==用于比较字符串时,判断的是两个字符串对象的内存引用是否一致,而非内容是否相同。哪怕role的内容看起来是"seller",只要它和字面量"seller"不是同一个对象引用,==就会返回false,直接触发else分支。
修复代码
将判断条件中的==替换为equals()方法,同时为避免role为null时触发空指针异常,建议用字面量调用equals():
// 原代码 if(role=="seller") { // 修改后 if("seller".equals(role)) {
额外验证与建议
- 可以通过打印哈希码确认引用差异:
System.out.println(role + " | 哈希码:" + role.hashCode()); System.out.println("seller | 哈希码:" + "seller".hashCode());
如果哈希码相同但==仍不成立,说明解析出的role是新的字符串对象,进一步验证必须用equals()比较内容。
2. 确认JWT生成时,存入的"role"声明确实是字符串类型的"seller",避免因类型不匹配导致解析结果不符合预期。
内容的提问来源于stack exchange,提问作者Thava Bruntha Kovaruthkumar
相关产品推荐
相关产品推荐

