Spring-boot 操作失败,签名验证失败:X-TIMESTAMP已过期

news/2025/2/16 2:42:28/
@Slf4j
public class SignAuthInterceptor implements HandlerInterceptor {/*** 5分钟有效期*/private final static long MAX_EXPIRE = 5 * 60;@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {log.info("request URI = " + request.getRequestURI());HttpServletRequest requestWrapper = new BodyReaderHttpServletRequestWrapper(request);//获取全部参数(包括URL和body上的)SortedMap<String, String> allParams = HttpUtils.getAllParams(requestWrapper);//对参数进行签名验证String headerSign = request.getHeader(CommonConstant.X_SIGN);String timesTamp = request.getHeader(CommonConstant.X_TIMESTAMP);//1.校验时间有消息try {DateUtils.parseDate(timesTamp, "yyyyMMddHHmmss");} catch (Exception e) {throw new IllegalArgumentException("签名验证失败:X-TIMESTAMP格式必须为:yyyyMMddHHmmss");}Long clientTimestamp = Long.parseLong(timesTamp);//判断时间戳 timestamp=201808091113if ((DateUtils.getCurrentTimestamp() - clientTimestamp) > MAX_EXPIRE) {throw new IllegalArgumentException("签名验证失败:X-TIMESTAMP已过期");}//2.校验签名boolean isSigned = SignUtil.verifySign(allParams,headerSign);if (isSigned) {log.debug("Sign 签名通过!Header Sign : {}",headerSign);return true;} else {log.error("request URI = " + request.getRequestURI());log.error("Sign 签名校验失败!Header Sign : {}",headerSign);//校验失败返回前端response.setCharacterEncoding("UTF-8");response.setContentType("application/json; charset=utf-8");PrintWriter out = response.getWriter();Result<?> result = Result.error("Sign签名校验失败!");out.print(JSON.toJSON(result));return false;}}

拦截器中配置了校验时间,出现这个问题主要原因可能为服务器时间与当前时间出现偏差导致,修改服务器时间即可解决。

Linux 查看当前时间:

sudo date

修改系统时间:使用date命令的-s选项来设置系统时间。可以使用24小时制或12小时制,格式为HH:MM:SS或hh:mm:ss。例如,将系统时间设置为10:48:00,可以使用以下命令:

sudo date -s "10:48:00"

修改系统日期:使用date命令的-s选项来设置系统日期。日期的格式为MMDDhhmm[[CC]YY][.ss],其中MM为月份,DD为日期,hh为小时,mm为分钟,CC为世纪,YY为年份的后两位,ss为秒数。例如,将系统日期设置为2023年09月20日,可以使用以下命令:

sudo date -s "0920104823"

修改系统时区:使用timedatectl命令来设置系统时区。例如,将系统时区设置为北京时间,可以使用以下命令:

sudo timedatectl set-timezone Asia/Shanghai


http://www.ppmy.cn/news/1116980.html

相关文章

数学建模| 优化入门+多目标规划

优化入门多目标规划 优化入门知识什么是优化问题如何判断是不是优化问题优化模型建模求解器优化问题的分类 多目标规划 优化入门知识 什么是优化问题 优化问题&#xff1a;求最优&#xff0c;例如获利最大、最少损失、最短路径、最小化风险等等。 例如&#xff1a;之前文章提…

数据库顶会 VLDB 2023 论文解读 - Krypton: 字节跳动实时服务分析 SQL 引擎设计

“Krypton 源于 DC 宇宙中的氪星&#xff0c;它是超人的故乡&#xff0c;以氪元素命名”。 引言 近些年&#xff0c; 在复杂的分析需求之外&#xff0c;字节内部的业务对于实时数据的在线服务能力也提出了更高的要求。大部分业务不得不采用多套系统来应对不同的 Workload&…

计算机视觉:从图像识别到深度学习

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 计算机视觉是人工智能领…

深度分析Oracle中的NULL

【squids.cn】 全网zui低价RDS&#xff0c;免费的迁移工具DBMotion、数据库备份工具DBTwin、SQL开发工具等 关键点 特殊值NULL意味着没有数据&#xff0c;它声明了该值是未知的事实。默认情况下&#xff0c;任何类型的列和变量都可以取这个值&#xff0c;除非它们有一个NOT N…

VMware Esxi 7.0.3用户名密码都对,网页却无法登录问题解决

Esxi 7.0.3安装完成&#xff0c;重启之后&#xff0c;下面就是esxi的界面&#xff1a; 之后通过网页管理esxi&#xff0c;输入网址&#xff0c;出现一个问题&#xff1a; &#xff08;esxi已连接上&#xff0c;所以拿其他网段举例&#xff09;连接不上&#xff0c;无法访问此页…

短视频矩阵系统源代码开发搭建分享--代码开源SaaS

一、什么是短视频矩阵系统&#xff1f; 短视频矩阵系统是专门为企业号商家、普通号商家提供帐号运营从流量 到转化成交的一站式服务方案&#xff0c;具体包含&#xff1a;点赞关注评论主动私信 &#xff0c;评论区回复&#xff0c;自动潜客户挖掘&#xff0c;矩阵号营销&#x…

Java面经整理(1)

一)Java中支持多继承吗,为什么? 答案:在JAVA中是不支持多继承的,原因是多继承会存在菱形继承的问题 菱形继承: 1)菱形继承也被称之为是钻石继承,是一种在JAVA面向对象编程的时候遇到的一个可能出现的继承问题; 2)假设JAVA支持多继承,那么就有可能一个类D继承两个不同的类…

怎么设计一个有创意性物联网系统

设计一个具有创意性的物联网系统需要充分发挥创新思维&#xff0c;考虑系统的实用性、可靠性、成本效益和可扩展性。以下是一些设计建议&#xff1a; 定义明确的问题&#xff1a;明确需要解决的问题或服务&#xff0c;例如&#xff0c;智能家居、智能物流、智能农业等。确保所…