NAME-LI 2022-01-07 17:05 采纳率: 16.7%
浏览 260
已结题

shiro多次重复执行doGetAuthenticationInfo

出现场景

在进行用户认证的时候,后端代码会重复执行自定义的Realms里面的doGetAuthenticationInfo方法,debug调试没有问题,日志打印同时出现多次

代码截图
 @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
        logger.info("开始身份验证");
        //1.获取前端传来的token
        String token = (String) authenticationToken.getPrincipal();
        Long userId = TokenGenerator.getUserId(token);
        logger.info("userId:" + userId);
        //2.根据token判断redis中是否存在
        boolean hasKey = redisUtil.hasKey(token);
        LoginVo loginVo = null;
        if (hasKey){
            //3.根据token从redis中查找对应的用户信息
            loginVo = (LoginVo) redisUtil.get(token);
            //4,如果用户不存在,抛出异常
            if (loginVo == null) {
                throw  new UnknownAccountException("用户不存在");
            }
        }else {
            //5,如果token不存在,抛出异常
            throw new IncorrectCredentialsException("token失效,请重新登录");
        }
        SysUser sysUser = BeanUtil.toBean(loginVo, SysUser.class);
        //将信息放到认证通过信息中去
        SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(
                sysUser,
                token,
                getName());
        //设置密码盐
//        authenticationInfo.setCredentialsSalt(ByteSource.Util.bytes(userInfo.getCredentialsSalt()));
        return authenticationInfo;
    }
运行结果及报错内容
2022-01-07 17:00:35.042  INFO 118780 --- [nio-8081-exec-6] c.nameli.admin.config.filter.AuthFilter  : 从前端获取的token:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJOQU1FLUwiLCJleHAiOjE2NDE1NDUzNDEsIlVVSUQiOiIyYTVlNDM4M2UyOGI0Yzc5OWI1MmMyODY3MjFmODhjMSIsInVzZXJJZCI6MX0.ZJfZXlsURNRCjeZ7WjWyz1E2wEUd5RTrp9Iz3ae_SL0
2022-01-07 17:00:35.042  INFO 118780 --- [nio-8081-exec-4] c.nameli.admin.config.filter.AuthFilter  : 从前端获取的token:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJOQU1FLUwiLCJleHAiOjE2NDE1NDUzNDEsIlVVSUQiOiIyYTVlNDM4M2UyOGI0Yzc5OWI1MmMyODY3MjFmODhjMSIsInVzZXJJZCI6MX0.ZJfZXlsURNRCjeZ7WjWyz1E2wEUd5RTrp9Iz3ae_SL0
2022-01-07 17:00:35.042  INFO 118780 --- [nio-8081-exec-5] c.nameli.admin.config.filter.AuthFilter  : 从前端获取的token:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJOQU1FLUwiLCJleHAiOjE2NDE1NDUzNDEsIlVVSUQiOiIyYTVlNDM4M2UyOGI0Yzc5OWI1MmMyODY3MjFmODhjMSIsInVzZXJJZCI6MX0.ZJfZXlsURNRCjeZ7WjWyz1E2wEUd5RTrp9Iz3ae_SL0
2022-01-07 17:00:45.763  INFO 118780 --- [nio-8081-exec-6] c.n.admin.config.shiro.MyShiroRealm      : 开始身份验证
2022-01-07 17:00:46.523  INFO 118780 --- [nio-8081-exec-5] c.n.admin.config.shiro.MyShiroRealm      : 开始身份验证
2022-01-07 17:00:46.523  INFO 118780 --- [nio-8081-exec-4] c.n.admin.config.shiro.MyShiroRealm      : 开始身份验证
2022-01-07 17:00:46.574  INFO 118780 --- [nio-8081-exec-5] c.n.admin.config.shiro.MyShiroRealm      : userId:1
2022-01-07 17:00:46.574  INFO 118780 --- [nio-8081-exec-4] c.n.admin.config.shiro.MyShiroRealm      : userId:1
2022-01-07 17:00:46.574  INFO 118780 --- [nio-8081-exec-6] c.n.admin.config.shiro.MyShiroRealm      : userId:1
2022-01-07 17:00:48.942  INFO 118780 --- [nio-8081-exec-6] c.nameli.admin.config.filter.AuthFilter  : onLoginFailure -------->  登录失败
2022-01-07 17:00:48.942  INFO 118780 --- [nio-8081-exec-4] c.nameli.admin.config.filter.AuthFilter  : onLoginFailure -------->  登录失败
2022-01-07 17:00:48.942 ERROR 118780 --- [nio-8081-exec-4] c.nameli.admin.config.filter.AuthFilter  : Validate token fail, token:com.nameli.admin.config.shiro.auth.AuthToken - null, rememberMe=false
error:token失效,请重新登录
2022-01-07 17:00:48.942  INFO 118780 --- [nio-8081-exec-5] c.nameli.admin.config.filter.AuthFilter  : onLoginFailure -------->  登录失败
2022-01-07 17:00:48.942 ERROR 118780 --- [nio-8081-exec-5] c.nameli.admin.config.filter.AuthFilter  : Validate token fail, token:com.nameli.admin.config.shiro.auth.AuthToken - null, rememberMe=false
error:token失效,请重新登录
2022-01-07 17:00:48.942 ERROR 118780 --- [nio-8081-exec-6] c.nameli.admin.config.filter.AuthFilter  : Validate token fail, token:com.nameli.admin.config.shiro.auth.AuthToken - null, rememberMe=false
error:token失效,请重新登录
尝试解决

查看其他人的博客,一种解决方案是注释shiroConfig中的DefaultAdvisorAutoProxyCreator方法
但是此种方法会导致权限注解无法使用,报错404,所以不适用

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 1月15日
    • 创建了问题 1月7日

    悬赏问题

    • ¥20 如何写正则表达式提前下面一段文字的数字
    • ¥15 气象网格数据与卫星轨道数据如何匹配
    • ¥100 java ee ssm项目 悬赏,感兴趣直接联系我
    • ¥15 微软账户问题不小心注销了好像
    • ¥15 x264库中预测模式字IPM、运动向量差MVD、量化后的DCT系数的位置
    • ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
    • ¥20 关于web前端如何播放二次加密m3u8视频的问题
    • ¥15 使用百度地图api 位置函数报错?
    • ¥15 metamask如何添加TRON自定义网络
    • ¥66 关于川崎机器人调速问题