我使用以下方法在身份验证期间创建JWT令牌:
private String createToken(Map<String, Object> claims,
String subject) {
JwtBuilder builder = Jwts.builder().setClaims(claims)
.setSubject(subject)
.setIssuedAt(
new Date(System.currentTimeMillis()));
builder = builder
.setExpiration(
new Date(System.currentTimeMillis() +
1000 * 60 * 60 * 10));
builder = builder
.signWith(
SignatureAlgorithm.HS256,
SECRET_KEY); //error on this line
return builder.compact();
}
但是,我在builder.signWith()
行上得到了一个NullPointerException
。
我不知道为什么,.setExpiration()
行后面的builder
不是空的,我检查了调试器(.signWith()
行的断点),好像没问题:
claims
不为空,包含主题和日期:
这是完整的错误:
org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [dispatcher] in context with path [/testproject_war_exploded] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause
java.lang.NullPointerException
at javax.xml.bind.DatatypeConverter.parseBase64Binary(DatatypeConverter.java:296)
at io.jsonwebtoken.impl.Base64Codec.decode(Base64Codec.java:26)
at io.jsonwebtoken.impl.DefaultJwtBuilder.signWith(DefaultJwtBuilder.java:99)
at testproject.security.JwtUtil.createToken(JwtUtil.java:52)
3条答案
按热度按时间xjreopfe1#
下面是使用HS256用私钥签署JWT令牌的方法:
fnx2tebb2#
我在使用jjwt 0.9.1和Java 11时遇到了同样的问题,通过从Java 11切换到Java 1.8解决了这个问题。
我的开发机器是MacOS Catalina 。
kupeojn63#
我遇到了同样的问题,我将功能更改为