1
wandehul 11 小时 24 分钟前 妈的,谁点进来谁傻 b ,来骂一句再走吧。
|
2
zenfsharp 11 小时 19 分钟前
羡慕 OP 可以把问题拖一个周。
换成我这,第二天就得问我解决了没。 |
3
prefect 11 小时 15 分钟前
临近下班的时候发现问题没解决,刚思路错了哈哈哈哈
|
4
YuzukiYukari 11 小时 3 分钟前 via Android
快进到出重大生产事故,大年三十被拉回公司加班
|
5
Ghostsss 10 小时 55 分钟前
等后续
|
6
no2cat 10 小时 52 分钟前
做得越多,错的越多。
|
7
L0L 9 小时 39 分钟前
我就是那个点进来的傻逼
|
8
eii 9 小时 37 分钟前
没了吗,再发说说呢?
|
9
newaccount 9 小时 29 分钟前
直说结果不描述问题
纯标题党! 画小圈圈诅咒你回家路上接到紧急 bug |
10
NillSpake 9 小时 25 分钟前
画小圈圈诅咒你回家路上接到紧急 bug
|
11
unclejoker 9 小时 20 分钟前
画小圈圈诅咒你回家路上接到紧急 bug
|
13
queifa OP @newaccount 我的我的,纯粹想分享下喜悦。这里具体说说吧:就是在 spring gateway 网关中加了一个过滤器,并且把一个多余的过滤器删除掉了。结果远程测试打死都过不了时间校验验证代码:
try { String value = PuzzleSolver.unPuzzle(x_token); log.info("解密结果, x_toke = {}, value = {}, userinfo = {}", x_token, value, userInfo); long time = Long.parseLong(value.substring(0, 13)); long start = System.currentTimeMillis(); difference = start - time; // 计算时间戳差值 log.info("{} time diff {},{},{}",requestId,start,time,difference); } catch (Exception e) { log.error("解密请求加密出错, x_toke = {}, userinfo = {} ,err:", x_token, userInfo, e); throw new BusinessException(ErrorEnum.UNAUTHORIZED); } if (difference < 0 || difference > 10000) { log.error("校验请求时间不合法, x_toke = {}, userinfo = {},difference={}", x_token, userInfo, difference); throw new BusinessException(ErrorEnum.UNAUTHORIZED); } 成都团队都没问题,就远程测试存在问题,difference 永远小于 0 ,而且因为是网关会影响其他需求测试,导致只能在快下班的时候和测试复现排查问题,断断续续搞了一周吧。今天直接把删除的代码还原了就可以了,最终定位是在删除的代码里存在:exchange.getResponse().getHeaders().add(HeaderConstant.PAYMENT_TIMESTAMP_KEY, String.valueOf(System.currentTimeMillis())); 前端会根据服务器返回的时间搓进行时间校准。 一开始一直是一位是是添加的 Filter 的顺序导致其时间不对,所以方向一直是在优化 Filter 的执行顺序上。 |
15
newaccount 8 小时 28 分钟前
|
16
queifa OP @newaccount window 系统问题吧,前端传过来的时间比服务器上的时间慢了几秒钟。diff 用 abs 按理来说也是可以的,但是领导不同意这种方案呀,可能会存在重放攻击。
|
17
newaccount 8 小时 17 分钟前
@queifa #16 老哥,你这个是前端比服务器时间快了几秒
从判断上看,如果时间不同步,那么快慢都是有可能的,代码里只检查了慢 10 秒的情况,所以我觉得应该取 abs 把快的情况也加进去,本身你后面的 10 秒检查并没有很好的处理重放 |
18
queifa OP @newaccount 是慢吧,当前时间减去某个时间为负数哦。
long time = Long.parseLong(value.substring(0, 13)); // 前端传的时间搓 long start = System.currentTimeMillis(); // 服务器时间搓 difference = start - time; // 计算时间戳差值 difference < 0 表示服务器时间比前端传递时间快,报错 difference > 0 表示服务器时间比前端传递时间慢 0 <= difference <= 10000,允许服务器时间比前端传递时间慢 |
19
newaccount 7 小时 54 分钟前
@queifa #18 有图有真相
diff < 0 == start - time < 0 == start < time ---- start ---- time ---->时间方向 ---- 服务器时间 ---- 前端时间 ---->时间方向 服务器比前端慢了 == 前端比服务器快了 |
20
queifa OP @newaccount 对的,我搞混了😂
|
21
rainbowGeek 6 小时 48 分钟前
画小圈圈诅咒你回家路上接到紧急 bug
|
22
lowman 6 小时 5 分钟前 写日记?祝你们公司的服务器大年初一集体宕机。
|
23
frank4liuyang 33 分钟前
画小圈圈诅咒你回家路上接到紧急 bug
|