springboot~关于md5签名引发的问题

事实是这样的,我有个接口,这个接口不能被篡改,于是想到了比较简单的md5对url地址参数进行加密,把这个密码当成是sign,然后服务端收到请求后,使用相同算法也生成sign,两个sign相同就正常没有被篡改过。

问题的出现

  • 接口中的参数包括userId,extUserId,时间,其中extUserId字符编码,中间会有+这种符号
  • 有些用户使用签名接口正常
  • 有一些用户总显示签名失败

问题原因

  • 因为有些用户的extUserId中包括了url上的特殊字符,它不能正常在在url上传输,必须进行urlEncode编码才行,这一点非常容易被忽略;程序中一般不需要手动urlDecode解码,都是由框架帮我们实现的。
  • 下面整理了一些url上需要编码的字符:
    • + URL中+表示空格 十六进制: %2B
    • / 分离目录和子目录 十六进制 : %2F
    • ? 分离实际的URL和参数 十六进制: %3F
    • % 特殊字符 十六进制: %25
    • # 表示书签 十六进制: %23
    • & URL中指定参数间的分隔符 十六进制: %26
    • = URL中指定参数的值 十六进制:%3D
    • 空格 URL中的空格可以用+号或者编码 十六进制 : %20

url在签名时一般这样处理

sign=md5(userId+extUserId+simpleDateFormat.format(new Date()) + SECRET).toUpperCase();
?extUserId=URL.Encode(extUserId)&sign=sign

注意:sign中是接收的参数,它不需要Encode,应该框架已经帮我们做了;而向下传递的url参数extUserId是需要手动Encode的。

原文链接:https://www.cnblogs.com/lori/p/17347186.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot~关于md5签名引发的问题 - Python技术站

(0)
上一篇 2023年4月23日
下一篇 2023年4月23日

相关文章

  • Spring MVC全局异常实例详解

    Spring MVC全局异常实例详解 Spring MVC是一种基于Java的Web框架,它提供了许多便捷的功能和工具,使得开发者可以更加高效地开发Web应用程序。其中,全局异常处理是Spring MVC中常用的一种技术,本文将详细讲解如何在Spring MVC中实现全局异常处理,并提供两个示例来说明如何实现这一过程。 步骤一:创建Spring MVC项目 …

    Java 2023年5月17日
    00
  • java如何用正则表达式匹配与提取字符串

    Java中使用正则表达式匹配和提取子字符串可以通过Java标准库中的Pattern和Matcher类实现。以下是使用正则表达式进行匹配和提取的攻略: 步骤1:创建正则表达式 首先需要创建一个正则表达式来匹配和提取字符串。正则表达式是由一些特殊字符和普通字符组成的模式,用于描述要匹配的字符串的形式。例如,正则表达式\d+ 可以匹配一个或多个数字。 步骤2:编译…

    Java 2023年5月27日
    00
  • 详解Spring与MyBatis的整合的方法

    当我们需要将Spring和MyBatis结合在一起使用时,可以采用以下步骤来实现: 1. 项目搭建 首先我们需要搭建一个Spring项目,可以使用Spring Boot或者Spring MVC。如果使用Spring Boot,则可以选择自动配置MyBatis的starter,这样无需手动配置MyBatis。如果使用Spring MVC,则需要手动配置MyBa…

    Java 2023年5月19日
    00
  • Java单例模式的创建,破坏和防破坏详解

    Java单例模式是一种常见的设计模式,旨在确保一个类只有一个实例,并提供一个全局访问点。这个设计模式在很多场景中非常有用,比如数据库连接池、日志记录类等。下面我们将详细讲解Java单例模式的创建、破坏和防破坏的攻略。 Java单例模式的创建 Java单例模式的创建有多种方式,以下是比较常见的两种: 静态变量 这种方式是单例模式创建的最简单方式,代码如下: p…

    Java 2023年5月26日
    00
  • java与php的区别浅析

    Java与PHP的区别浅析 Java和PHP都是常见的编程语言,它们可以用于开发Web应用程序、桌面应用程序、移动应用程序等。但是Java和PHP在许多方面都有不同的使用场景和不同的特点。下面是Java与PHP的区别浅析。 1. 编译方式 Java是一种编译型语言,它的代码是通过JVM(Java Virtual Machine)进行编译和执行的。Java代码…

    Java 2023年6月15日
    00
  • 如何成为一个优秀的jsp程序员

    如何成为一个优秀的JSP程序员 1. 学习JSP基础知识 要成为一个优秀的JSP程序员,首先需要掌握JSP基础知识,如JSP语法、JSP指令、JSP标签库、JavaBean和EL表达式等。建议可以先通过阅读JSP相关的书籍或在线课程进行学习,同时也可以自己动手编写一些简单的JSP程序来加深理解。另外,还需要对Java基础语法有一定的掌握,因为JSP底层是基于…

    Java 2023年5月23日
    00
  • MyBatis如何使用(二)

    下面是“MyBatis如何使用(二)”的完整攻略: MyBatis如何使用(二) 在上一篇文章中,我们学习了MyBatis的基本概念和使用方法。本篇文章将进一步介绍如何使用MyBatis进行数据操作。 数据库连接配置 在使用MyBatis进行数据操作前,我们需要先进行数据库连接配置。在MyBatis中,数据库连接信息是通过配置文件来管理的。下面是一个示例的配…

    Java 2023年6月1日
    00
  • Java对象的使用过程是什么?

    Java对象的使用过程分为以下几个步骤: 创建对象:使用new关键字创建一个对象并为其分配内存 初始化对象:为对象的属性赋初值 使用对象:调用对象的方法或属性操作对象 销毁对象:当对象不再被使用时,销毁对象并释放内存 以下是两个示例说明: 示例1: // 创建一个Person类 public class Person { private String nam…

    Java 2023年5月11日
    00
合作推广
合作推广
分享本页
返回顶部