dolyw / ShiroJwt

API SpringBoot + Shiro + Java-Jwt + Redis(Jedis)

Home Page:https://gitee.com/dolyw/ShiroJwt

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Jwt应该异常转换为Shiro异常?

yihuishou opened this issue · comments

token刷新的时候后台会打印一大堆东西,而且Shiro也会报异常类型警官的说。

截图看下,我测试没有发现问题

Token刷新时报的是你当前访问的AccessToken过期的异常吧,刷新的机制是当前AccessToken已过期,且RefreshToken还存在,才进行刷新,所以抛异常,你可以自己Debug走一遍流程

比如签名异常的时候…

qq 20181008100616

签名异常...这是你Token私钥KEY有问题?这个异常是你Token有误才会报的,正常不会报这个异常,不过我刚刚Debug了一下,确实会重复调用doGetAuthorizationInfo认证方法,好像是SpringBoot整合Shiro的问题,所以导致后台抛出N个Token过期和Token提交失败异常

这个是shiro验证异常的问题,如果抛出的不是shiro的异常,shrio就会打印出来。并提示警告吧?

image
这个和Shiro没有关系,这个是JWT的Token校验失败抛出的异常

解决了,你更新下,一直都没发现这个问题,这是原作者没有解决的问题,Shiro源码是执行isAccessAllowed和onAccessDenied方法,现在只重写了isAccessAllowed,而onAccessDenied源码是重复调用了executeLogin方法,造成了循环调用认证,所以导致后台抛出N个Token过期和Token提交失败异常,现在没有了,认证和刷新Token都只会抛出一个当前Token过期的异常,你可以看下

Jwt 3.4.0 已经解决了字符集异常问题,现在不用处理了。
shiro打印警告信息的源码部分:
qq 20181008150543

这个是Shiro捕获到Token过期异常时打印的警告,你看下,异常不会再报了,只会抛出一个当前Token过期的异常

一般不需要打印这个吧?

image

Shiro源码里打印的,我也没办法,不至于一个打印去重写把 ~~

也是呢~

既然已经手动处理了。拦截配置里的 factoryBean.setUnauthorizedUrl("/401"); 也没有必要了吧?

没发现哎,之前都把/401的都删除了,这里还有一个残留。。。你Fork提交一下吧