为了账号安全,请及时绑定邮箱和手机立即绑定

获取 java.lang.NoSuchMethodException: io.

获取 java.lang.NoSuchMethodException: io.

紫衣仙女 2023-06-14 16:17:00
我最近开始出现以下异常,只有在运行 junits 时。在正常流程中,该方法运行良好。(事实上 ,甚至 jUnits 过去一段时间都可以正常工作)java.lang.NoSuchMethodException:io.jsonwebtoken.impl.crypto.MacProvider.generateKey(io.jsonwebtoken.SignatureAlgorithm)以下是方法:public static String generateDummyJWT(String userName){     return Jwts.builder().claim("user_name", StringUtils.defaultString(userName)).setAudience("client1").signWith(Keys.secretKeyFor(SignatureAlgorithm.HS384)).compact();    }和 jjwt 版本:以下是完整的堆栈跟踪:原因:java.lang.IllegalStateException:无法调用类方法 io.jsonwebtoken.impl.crypto.MacProvider#generateKey。确保必要的实现在运行时类路径中。在 io.jsonwebtoken.lang.Classes.invokeStatic(Classes.java:202) 在 io.jsonwebtoken.security.Keys.secretKeyFor(Keys.java:121) 在 com.random.util.ServiceSpecificUtil.generateDummyJWT(ServiceSpecificUtil.java:143) ) 在 com.random.util.ServiceConstants.(ServiceConstants.java:203) 在 com.random.MyClass.isUserBranch(MyClass.java:67) 在 com.random.MyClass.validName(MyClass.java:93) 在 com. random.MyClass.preConditionCheck(MyClass.java:82) 在 com.random.MyClass.get(MyClass.java:46) 在 com.random.MyClass2.evaluateExpression(MyClass2.java:218) 在 sun.reflect.NativeMethodAccessorImpl。NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method. java:498) at io.jsonwebtoken.lang.Classes.invokeStatic(Classes.java:198) ... 66 更多 原因:java.lang.IllegalStateException:HmacSHA384 算法不可用。这永远不会发生在 JDK 7 或更高版本上——请将此报告给 JJWT 开发人员。在 io.jsonwebtoken.impl.crypto.MacProvider.generateKey(MacProvider.java:94) 在 io.jsonwebtoken.impl.crypto.MacProvider.generateKey(MacProvider.java:63) ... 还有 71 个原因:java.security。 NoSuchAlgorithmException:HmacSHA384 KeyGenerator 在 javax.crypto.KeyGenerator 中不可用。
查看完整描述

1 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

我能够解决我的问题。

团队中有人在初始化静态最终变量时添加了对上述函数的调用,如下所示:

public static String TOKEN_GUEST = ServiceSpecificUtil.generateDummyJWT(USERNAME);

PowerMock现在,由于大量使用反射和字节码操作,似乎访问 java.security packges 通常不能很好地工作:

@PowerMockIgnore({"org.apache.http.conn.ssl.*", "javax.net.ssl.*" , "javax.crypto.*"})

当从另一个函数调用上述函数时,这可能有助于防止错误。但这并不能防止静态变量初始化中的错误。

public static String TOKEN_GUEST = ServiceSpecificUtil.generateDummyJWT(USERNAME);
查看完整回答
反对 回复 2023-06-14
  • 1 回答
  • 0 关注
  • 153 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信