首页 文章

JJWT库和句柄到期ExpiredJWTException

提问于
浏览
2

我试图在https://stackoverflow.com上找到有关此主题的信息,但无法 grab 该异常 . 我想 grab 那个例外并做另一件事 . 尝试在catch块上发表评论异常声明但没有进展 .

谢谢阅读 .

例外:

03-Mar-2018 18:32:16.941 SEVERE [http-nio-1234-exec-26] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service()for servlet [Jersey Web Application]与路径的上下文[/ uis]抛出异常[io.jsonwebtoken.ExpiredJwtException:JWT在2018-03-03T18:32:03Z到期 . 当前时间:2018-03-03T18:32:16Z,相差13940毫秒 . 允许时钟偏差:0毫秒 . ]根本原因io.jsonwebtoken.ExpiredJwtException:JWT在2018-03-03T18:32:03Z到期 . 当前时间:2018-03-03T18:32:16Z,相差13940毫秒 . 允许的时钟偏差:0毫秒 . at io.jsonwebtoken.impl.DefaultJwtParser.parse(DefaultJwtParser.java:385)at io.jsonwebtoken.impl.DefaultJwtParser.parse(DefaultJwtParser.java:481)at io.jsonwebtoken.impl.DefaultJwtParser.parseClaimsJws(DefaultJwtParser.java:541) )at az.naxtel.java.JWTController.isValid(JWTController.java:53)at az.naxtel.java.JWTController.getManagerFromToken(JWTController.java:37)at az.naxtel.api.cc.resource.RedmineJournalResource.getJournalsCount( RedmineJournalResource.java:59)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java位于org.glassfish.jersey.server的org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda $ static $ 0(ResourceMethodInvocationHandlerFactory.java:76)的.lang.reflect.Method.invoke(Method.java:498) . model.internal.AbstractJavaResourceMethodDispatcher $ 1.run(Abstrac tJavaResourceMethodDispatcher.java:148)org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:191)at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider $ ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider . java:200)org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:103)org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:493)at org位于org.glassfish.jersey.server.ServerRuntime的org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:104)的.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:415) $ 1.run(ServerRuntime.java:277)org.glassfish.jersey.internal.Errors $ 1.call(Errors.java:272)org.glassfish.jersey.internal.Errors $ 1.call(Errors.java:268)在org.glassfish.jersey.inter位于org.glassfish.jersey.internal.Errors.process(Errors.java:298)的nal.Errors.process(Errors.java:316)org.glassfish.jersey.internal.Errors.process(Errors.java:268) org.glassfish.jersey.proc.process.internal.RequestScope.runInScope(RequestScope.java:289)org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:256)org.glassfish.jersey.server.ApplicationHandler .handle(ApplicationHandler.java:703)org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:416)org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:370)org . glassg.jersey.servlet.ServletContainer.service(ServletContainer.java:389)org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:342)org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer . java:229)org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFil) terChain.java:166)atg.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)org.apache上的org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)中的.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)位于org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java) :96)在org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)at atorg.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)org.apache.catalina.valves.AbstractAccessLogValve.invoke(在org.apache.cyal上的org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)中的orA.apache.yava.avter上的orA.apache.catalina.connevice.CoyoteAdapter.service(CoyoteAdapter.java:342)中的AbstractAccessLogValve.java:650) .http11.Http11Processor.service(Http11Processor.java:803)atg.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)at org.apache.coyote.AbstractProtocol $ ConnectionHandler.process(AbstractProtocol.java:790)at at org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun(NioEndpoint.java:1459)位于java.util.concurrent的org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) . ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:62 4)atg.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61)at java.lang.Thread.run(Thread.java:748)

检查令牌:

private boolean isValid(String token) {
    boolean validation = false;
    try {
        Jwts.parser().setSigningKey(PRIVATE_KEY).parseClaimsJws(token).getBody().getSubject();
        validation = true;
    } catch (SignatureException e) {
        Logger.getLogger(JWTController.class.getName()).log(Level.ERROR, e);
    }
    return validation;
}

1 回答

  • 4

    这是因为你没有 grab 相关的例外 .

    通过添加以下 catch (ExpiredJwtException e) 声明来更改您的代码:

    试试这个:

    try {
        Jwts.parser().setSigningKey(PRIVATE_KEY).parseClaimsJws(token).getBody().getSubject();
        validation = true;
    } catch (ExpiredJwtException e) {
        System.out.println(" Token expired ");
    } catch (SignatureException e) {
        Logger.getLogger(JWTController.class.getName()).log(Level.ERROR, e);
    } catch(Exception e){
        System.out.println(" Some other exception in JWT parsing ");
    }
    

相关问题