广告
返回顶部
首页 > 资讯 > 后端开发 > 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://www.lsjlt.com/news/163171.html(转载时请注明来源链接)

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 详解Java接口签名(Signature)实现方案
    目录一、要求二、流程三、实现大家好,我是程序员田同学! 今天上午收到一个需求,针对当前的系统开发一个对外开放的接口。 既然是对外开放,那么调用者一定没有我们系统的Token,就需要对...
    99+
    2022-11-13
  • Java接口签名如何实现
    这篇文章给大家分享的是有关Java接口签名如何实现的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、要求下图为具体要求二、流程线下分配appid和appsecret,针对不同的调用方分配不同的appid和apps...
    99+
    2023-06-28
  • 接口签名怎么用Java实现
    java实现接口签名 为了保证数据传输的安全性,跟其他系统进行数据交互时,双方应该约定好密钥,把数据进行加密,接口签名,这样双方调用接口时,验证接口签名一致时就表明数据传输过程中没有...
    99+
    2022-11-12
  • 接口签名如何使用Java实现
    这篇文章主要介绍了接口签名如何使用Java实现,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。java实现接口签名为了保证数据传输的安全性,跟其他系统进行数据交互时,双方应该约...
    99+
    2023-06-15
  • Java实现接口限流方案
    本文实例为大家分享了Java实现接口限流方案的具体代码,供大家参考,具体内容如下 RateLimiter Google开源工具包Guava提供了限流工具类RateLimiter,基于...
    99+
    2022-11-12
  • Java实现APIsign签名校验的方法详解
    目录1. 前言2. 签名生成策略3. API 签名算法 Java 实现4. 测试一下1. 前言 目的:为防止中间人攻击。 场景: 项目内部前后端调用,这种场景只需要做普通参数的签名校...
    99+
    2022-11-13
  • java单机接口限流处理方案详解
    对单机服务做接口限流的处理方案 简单说就是设定某个接口一定时间只接受固定次数的请求,比如/add接口1秒最多接收100次请求,多的直接拒绝,这个问题很常见,场景也好理解,直接上代码:...
    99+
    2022-11-12
  • java中抽象类、抽象方法、接口与实现接口实例详解
    前言对于java中的抽象类,抽象方法,接口,实现接口等具体的概念就不在这里详细的说明了,网上书本都有很多解释,主要是我懒,下面通过一个例子来说明其中的精髓要点,能不能练成绝世武功,踏上封王之路,就看自己的的啦(不要误会,我指的只是我自己啦啦...
    99+
    2023-05-30
    java 抽象类 接口
  • 文件接口与二维码: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+
    2022-11-13
  • 分布式系统中的自然语言处理接口开发详解:Java实现方案
    自然语言处理(NLP)是人工智能领域中的一个重要分支,它涵盖了语音识别、文本分类、情感分析等多个领域。在分布式系统中,NLP接口的开发显得尤为重要,因为它能够帮助不同的系统之间更好地交流和协同工作。本文将介绍如何使用Java实现NLP接口...
    99+
    2023-10-25
    分布式 自然语言处理 接口
  • Java集合之Map接口与实现类详解
    目录初识Map:Map接口没有从Collection接口继承,Map接口用于维护“键-值”对数据,这个“键-值”对就是Map中的元素,...
    99+
    2022-12-08
    Java 集合 Map接口 Java Map接口 Java实现Map接口
  • Java之单例模式实现方案详解
      单例模式是最常用到的设计模式之一,熟悉设计模式的朋友对单例模式都不会陌生。一般介绍单例模式的书籍都会提到 饿汉式 和 懒汉式 这两种实现方式。但是除了这两种方式,本文还会介绍其他...
    99+
    2022-11-12
  • Spring Security实现接口放通的方法详解
    目录1.SpringBoot版本2.实现思路3.实现过程3.1新建注解3.2新建请求枚举类3.3判断Controller方法上是否存在该注解3.4在SecurityConfig上进行...
    99+
    2022-11-13
  • Java超详细讲解接口的实现与用法
    目录1.接口的定义2.接口的实现3.接口的引用4.接口的继承5.利用接口实现多重继承1.接口的定义 接口是一种特殊的抽象类,是Java提供的一个重要的功能,与抽象类不同的是: 接口的...
    99+
    2022-11-13
  • 详解Spring中实现接口动态的解决方法
    前言本文主要给大家介绍的是关于Spring实现接口动态的相关内容,分享出来供大家参考学习,下面话不多说,来一起看看详细的介绍吧。关于这个问题是因为领导最近跟我提了一个需求,是有关于实现类Mybatis的@Select、@Insert注解的功...
    99+
    2023-05-31
    spring 动态接口
  • JavaScript实现请求服务端接口方法详解
    JavaScript 中请求服务端接口的代码实现可能会因为使用的方法而有所不同。 1、使用 XMLHttpRequest: var xhr = new XMLHttpRequest(...
    99+
    2023-01-31
    JS请求服务端接口 JavaScript请求服务端接口
  • springboot接口多实现类选择性注入解决方案
    目录一、问题的描述二、相对低级解决方案2.1. 方案一:使用@Primary注解2.2. 方案二:使用@Resource注解2.3.方案三:使用@Qualifier注解三、相对高级的...
    99+
    2022-11-13
  • Java 实现限流器处理Rest接口请求详解流程
    Maven依赖 <dependency> <groupId>com.google.guava</groupI...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作