返回顶部
首页 > 资讯 > 后端开发 > Python >详解Java接口签名(Signature)实现方案
  • 323
分享到

详解Java接口签名(Signature)实现方案

2024-04-02 19:04:59 323人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录一、要求二、流程三、实现大家好,我是程序员田同学! 今天上午收到一个需求,针对当前的系统开发一个对外开放的接口。 既然是对外开放,那么调用者一定没有我们系统的Token,就需要对

大家好,我是程序员田同学!

今天上午收到一个需求,针对当前的系统开发一个对外开放的接口。

既然是对外开放,那么调用者一定没有我们系统的Token,就需要对调用者进行签名验证,签名验证采用主流的验证方式,采用Signature 的方式。

一、要求

下图为具体要求

二、流程

​1、线下分配appid和appsecret,针对不同的调用方分配不同的appid和appsecret

  2、加入timestamp(时间戳),10分钟内数据有效

  3、加入流水号noncestr(防止重复提交),至少为10位。针对查询接口,流水号只用于日志落地,便于后期日志核查。 针对办理类接口需校验流水号在有效期内的唯一性,以避免重复请求。

  4、加入signature,所有数据的签名信息。

三、实现

简单来说,调用者调用接口业务参数在body中传递,header中额外增加四个参数signature、appkey、timestamp、noncestr。

我们在后台取到四个参数,其后三个参数加上调用者分配的appSecret,使用字典排序并使用MD5加密后与第一个参数signature进行比对,一致既表示调用者有权限调用。

以下代码为接口验证签名的demo实现:

 //引用jackson依赖
    @Autowired
    private ObjectMapper objectMapper;
    @Value("${appsecret}")
    private String appSecret;
  
  
    boolean checkSignature(PreInfoItem preInfoItem) throws JSONProcessingException, IllegalAccessException {
        String signature="signature";
        String appkey="appkey";
        String timestamp="timestamp";
        String noncestr="noncestr";
        httpservletRequest request = ServletUtils.getRequest();
        String headerSignature = request.getHeader(signature);
        String headerAppkey = request.getHeader(appkey);
        String headerTimestamp = request.getHeader(timestamp);
        String headerNoncestr = request.getHeader(noncestr);
		//因为需要排序,直接使用TreeMap
        Map<String,Object> parms=new TreeMap<>();
        parms.put(appkey,headerAppkey);
        parms.put(timestamp,headerTimestamp);
        parms.put(noncestr,headerNoncestr);
        Map<String, Object> strinGobjectMap = objectToMap(parms, preInfoItem);
        String s = buildSignature(stringObjectMap);
        //签名比对
        if (s.equals(headerSignature)){
            return true;
        }
        return false;
    }
    Map<String,Object> objectToMap(Map<String,Object> map,Object o){
        Field[] declaredFields = o.getClass().getDeclaredFields();
        for (Field field : declaredFields) {
            field.setAccessible(true);
            try {
                if (field.getName() instanceof String){
                    map.put(field.getName(),field.get(o));
                }
            }catch (IllegalAccessException e){
                throw new CustomException("对象转map异常");
            }
        }
        return map;
    }
  private String buildSignature(Map<String,Object> maps){
      String s2;
      try {
            StringBuffer s = null;
            String s1 = objectMapper.writeValueAsString(maps);
            //添加appSecret
            s.append(s1).append(appSecret);
             s2 = DigestUtils.md5DigestAsHex(s.toString().getBytes());
        }catch (jsonProcessingException e){
            throw new CustomException("map转json异常");
        }
        return s2;
    }

到此这篇关于Java接口签名(Signature)实现方案 的文章就介绍到这了,更多相关Java接口签名内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 详解Java接口签名(Signature)实现方案

本文链接: https://lsjlt.com/news/163171.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 详解Java接口签名(Signature)实现方案
    目录一、要求二、流程三、实现大家好,我是程序员田同学! 今天上午收到一个需求,针对当前的系统开发一个对外开放的接口。 既然是对外开放,那么调用者一定没有我们系统的Token,就需要对...
    99+
    2024-04-02
  • Java接口签名如何实现
    这篇文章给大家分享的是有关Java接口签名如何实现的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、要求下图为具体要求二、流程线下分配appid和appsecret,针对不同的调用方分配不同的appid和apps...
    99+
    2023-06-28
  • 接口签名怎么用Java实现
    java实现接口签名 为了保证数据传输的安全性,跟其他系统进行数据交互时,双方应该约定好密钥,把数据进行加密,接口签名,这样双方调用接口时,验证接口签名一致时就表明数据传输过程中没有...
    99+
    2024-04-02
  • 接口签名如何使用Java实现
    这篇文章主要介绍了接口签名如何使用Java实现,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。java实现接口签名为了保证数据传输的安全性,跟其他系统进行数据交互时,双方应该约...
    99+
    2023-06-15
  • 详解PHP接口签名验证
    目录概览常用验证单向散列加密对称加密非对称加密密钥安全管理接口调试工具在线接口文档扩展小结概览 在设计签名验证的时候,一定要满足以下几点: 可变性:每次的签名必须是不一样的...
    99+
    2024-04-02
  • Java实现接口限流方案
    本文实例为大家分享了Java实现接口限流方案的具体代码,供大家参考,具体内容如下 RateLimiter Google开源工具包Guava提供了限流工具类RateLimiter,基于...
    99+
    2024-04-02
  • Java实现APIsign签名校验的方法详解
    目录1. 前言2. 签名生成策略3. API 签名算法 Java 实现4. 测试一下1. 前言 目的:为防止中间人攻击。 场景: 项目内部前后端调用,这种场景只需要做普通参数的签名校...
    99+
    2024-04-02
  • php、go、python后端接口签名实现
    php实现 function makeSignature($args, $key){ if(isset($args['sign'])) { $oldSign = $args['sign']; unset(...
    99+
    2023-09-01
    linux 签名 接口安全
  • java单机接口限流处理方案详解
    对单机服务做接口限流的处理方案 简单说就是设定某个接口一定时间只接受固定次数的请求,比如/add接口1秒最多接收100次请求,多的直接拒绝,这个问题很常见,场景也好理解,直接上代码:...
    99+
    2024-04-02
  • java中抽象类、抽象方法、接口与实现接口实例详解
    前言对于java中的抽象类,抽象方法,接口,实现接口等具体的概念就不在这里详细的说明了,网上书本都有很多解释,主要是我懒,下面通过一个例子来说明其中的精髓要点,能不能练成绝世武功,踏上封王之路,就看自己的的啦(不要误会,我指的只是我自己啦啦...
    99+
    2023-05-30
    java 抽象类 接口
  • Vue+Springboot实现接口签名的示例代码
    1、实现思路 接口签名目的是为了,确保请求参数不会被篡改,请求的数据是否已超时,数据是否重复提交等。 接口签名示意图 客户端提交请求时,将以下参数按照约定签名方式进行签名,随后...
    99+
    2024-04-02
  • C#怎么实现快递鸟API接口签名
    本篇内容介绍了“C#怎么实现快递鸟API接口签名”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!方法调用的代码实现//电商IDstring&n...
    99+
    2023-06-03
  • 文件接口与二维码:PHP技术实现方案详解!
    随着互联网技术的发展,文件接口和二维码逐渐成为了人们日常生活中不可或缺的一部分。在这篇文章中,我们将会详细介绍文件接口和二维码的概念,以及如何使用PHP技术来实现它们的功能。 一、文件接口 文件接口是指一种允许程序访问和处理文件的接口。在...
    99+
    2023-09-14
    文件 接口 二维码
  • Java基于BC包的实现SM2签名验签方案,以及SM2签名中bc包冲突的部分解决方法
    信创改造也有一段时间了,这里记录和总结一些关于SM2算法的知识点。 1. pom.xml org.bouncycastle bcprov-jdk15on 1.57 或 or...
    99+
    2023-08-19
    java 算法
  • 实例详解Java调用第三方接口方法
    目录一、 通过JDK网络类Java.net.HttpURLConnection1.java.net包下的原生java api提供的http请求2.HttpClientUtil工具类3...
    99+
    2024-04-02
  • java签名实现的方式有哪些
    Java签名实现的方式有以下几种: 数字签名:使用非对称加密算法,如RSA或DSA,生成一个数字签名,用于验证数据的完整性和认证发...
    99+
    2023-10-26
    java
  • Java集合之Map接口与实现类详解
    目录初识Map:Map接口没有从Collection接口继承,Map接口用于维护“键-值”对数据,这个“键-值”对就是Map中的元素,...
    99+
    2022-12-08
    Java 集合 Map接口 Java Map接口 Java实现Map接口
  • 分布式系统中的自然语言处理接口开发详解:Java实现方案
    自然语言处理(NLP)是人工智能领域中的一个重要分支,它涵盖了语音识别、文本分类、情感分析等多个领域。在分布式系统中,NLP接口的开发显得尤为重要,因为它能够帮助不同的系统之间更好地交流和协同工作。本文将介绍如何使用Java实现NLP接口...
    99+
    2023-10-25
    分布式 自然语言处理 接口
  • java中的interface接口实例详解
     java中的interface接口实例详解接口:Java接口是一些方法表征的集合,但是却不会在接口里实现具体的方法。java接口的特点如下:java接口不能被实例化2、java接口中声明的成员自动被设置为public,所以不存在...
    99+
    2023-05-31
    java interface ava
  • Java之单例模式实现方案详解
      单例模式是最常用到的设计模式之一,熟悉设计模式的朋友对单例模式都不会陌生。一般介绍单例模式的书籍都会提到 饿汉式 和 懒汉式 这两种实现方式。但是除了这两种方式,本文还会介绍其他...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作