io.jsonwebtoken.SignatureException: JWT signature does not match locally computed signature. JWT validity cannot be asserted and should not be trusted.
?? ?at io.jsonwebtoken.impl.DefaultJwtParser.parse(DefaultJwtParser.java:354)
?? ?at io.jsonwebtoken.impl.DefaultJwtParser.parse(DefaultJwtParser.java:481)
?? ?at io.jsonwebtoken.impl.DefaultJwtParser.parseClaimsJws(DefaultJwtParser.java:541)
?? ?at com.example.mz.helpwork.util.JwtUtil.parseJWT(JwtUtil.java:107)
?? ?at com.example.mz.helpwork.config.jwt.JwtAuthenticationTokenFilter.doFilterInternal(JwtAuthenticationTokenFilter.java:39)
?? ?at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
?? ?at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
?? ?at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116)
?? ?at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
?? ?at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:92)
?? ?at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:77)
?? ?at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
?? ?at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
?? ?at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)
?? ?at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
?? ?at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)
?? ?at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
?? ?at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
?? ?at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:215)
?? ?at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178)
?? ?at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:358)
?? ?at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:271)
?? ?at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
?? ?at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
?? ?at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
?? ?at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
?? ?at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
?? ?at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
?? ?at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
?? ?at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
?? ?at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
?? ?at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
?? ?at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
?? ?at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
?? ?at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
?? ?at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
?? ?at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
?? ?at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
?? ?at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
?? ?at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
?? ?at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
?? ?at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
?? ?at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
?? ?at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373)
?? ?at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
?? ?at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
?? ?at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1594)
?? ?at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
?? ?at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
?? ?at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
?? ?at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
?? ?at java.lang.Thread.run(Thread.java:750)
11:27:19 ?ERROR ?Servlet.service() for servlet [dispatcherServlet] in context with path [/helpwork] threw exception
java.lang.RuntimeException: token非法?
?這個報錯翻譯成大白話就是io.jsonwebtoken.SignatureException:JWT簽名與本地計算的簽名不匹配。JWT的有效性無法斷言,也不應(yīng)受到信任。
我是在我的項目中引入springsecurity+jwt時出現(xiàn)的問題
當遇到這個問題的時候,首先是打斷點,判斷是哪里出現(xiàn)了問題,我的項目在我生成token的時候是沒有任何問題的,就是到解析的時候,解析不出來,直接拋出異常。當然針對這個問題,有兩種解決方案:更改jwt的工具類;改解析token的代碼
當然,我選擇的是前者
可以參考我的jwt工具類
// 這個方法的作用是生成令牌字符串,根據(jù)userId生成,生成令牌三個素材:密鑰 過期時間 userId
public String createToken(int userId){
// 對日期做偏移,算一下5天后的日期。new Date()是當前日期 DateField.DAY_OF_YEAR是偏移單位
// date是偏移之后的日期
Date date=DateUtil.offset(new Date(), DateField.DAY_OF_YEAR,expire);
// 創(chuàng)建加密算法密鑰的對象,調(diào)用Algorithm.HMAC256(secret)的靜態(tài)工廠方法創(chuàng)建對象
Algorithm algorithm=Algorithm.HMAC256(secret);
// 執(zhí)行加密
JWTCreator.Builder builder= JWT.create();
String token=builder.withClaim("userId",userId).withExpiresAt(date).sign(algorithm);
return token;
}
// 通過令牌解密出userId
public int getUserId(String token){
// 解碼的對象
DecodedJWT jwt=JWT.decode(token);
// 通過屬性名反向得到userid,asInt()是數(shù)據(jù)類型
int userId=jwt.getClaim("userId").asInt();
return userId;
}
// 驗證令牌,沒有返回值,失敗拋異常
public void verifierToken(String token){
// 創(chuàng)建算法對象
Algorithm algorithm=Algorithm.HMAC256(secret);
// 用算法對象進行解密
JWTVerifier verifier=JWT.require(algorithm).build();
// 調(diào)用驗證方法,傳入token
verifier.verify(token);
}
最終的結(jié)果就是解析成功的,如圖?
?文章來源:http://www.zghlxwxcb.cn/news/detail-768661.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-768661.html
到了這里,關(guān)于io.jsonwebtoken.SignatureException: JWT signature does not match locally computed signature. JWT val的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!