前后端签名一致性场景

后台产生日志,需要到前台使用Ukey签名,如果保证不漏签、不重复签;

Ukey日志签名设计方案:

keylog:sign:user 待发送的日志id集合
keylog:user:id 日志对象

1、前端每次发送签名数据请求时,系统查询数据库该用户未签名的日志(每次查5条),将未签名的日志id存入keylog:sign:user集合,
存之前先判断集合里面有没有该id(sismember),有的话判断 keylog:user:id 存不存在,不存在的话(代表过期了),则放keylog:user:id进去;
没有的话(有可能正在签名),再判断 keylog:user:id 存不存在,不存在的话(代表签名失败或者未签名)则放keylog:sign:user进去,并放keylog:user:id进去,并设置keylog:user:id的有效期为60s;
以上操作完成后,从keylog:sign:user取出待签名日志id(spop) ,依次取5条,并根据日志id取出日志对象 keylog:user:id,组合成list传给前端浏览器;
2、logaspect 产生日志的时候,将日志id存入keylog:send:user,并将日志对象放到 keylog:user:id(设置有效时间为60s);
3、签名成功后更新数据库日志签名状态为签名成功,并删除日志对象 keylog:user:id;

posted on 2021-08-12 20:18  TrustNature  阅读(271)  评论(0)    收藏  举报