一年前写过一篇,叫Webservice校验机制,叫法不太对,就是接口鉴权

https://www.cnblogs.com/mindzone/p/15078436.html

这东西就是说,你提供给外部的调用的这个接口,并不是随便一个请求就能访问的,需要增加一个校验的逻辑

只有符合这个逻辑的调用方才可以访问使用你的接口,算是安全性的措施吧:

这篇新增加了一个更为简单一点的,代码量稍微少一点的案例:

首先是SHA256的加密类:

package com.yonyou.dmscloud.interfaceManage.utils;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException; /**
* @Description: 实现Sha256实例
* @author: zkf
* @date 2020年10月13日
*/
public class Sha256 { /**
* @Description:
* @author: zkf
* @date 2020年10月13日
* @param str 加密后的报文
* @param encoder 编码方式(例:UTF-8)
* @return String
*/
public static String getSHA256(String str,String encoder) {
MessageDigest messageDigest;
String encodestr = "";
try {
messageDigest = MessageDigest.getInstance("SHA-256");
messageDigest.update(str.getBytes(encoder));
encodestr = byte2Hex(messageDigest.digest());
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return encodestr;
} /**
* 将byte转为16进制
*
* @param bytes
* @return
*/
private static String byte2Hex(byte[] bytes) {
StringBuffer stringBuffer = new StringBuffer();
String temp = null;
for (int i = 0; i < bytes.length; i++) {
temp = Integer.toHexString(bytes[i] & 0xFF);
if (temp.length() == 1) {
// 1得到一位的进行补0操作
stringBuffer.append("0");
}
stringBuffer.append(temp);
}
return stringBuffer.toString();
} }

然后是接口处理的过程:

package com.yonyou.dmscloud.interfaceManage.utils;

import java.io.IOException;
import java.util.Date;
import java.util.Map; import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicHeader;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.springframework.beans.factory.annotation.Autowired; public class HttpClientJsonUtilShuZi { @Autowired
Sha256 sha256 = new Sha256(); /**
* 数字门店鉴权字段 key
*/
private static final String apiKey = "4EA18E9EFB1F0EB645AD17B6BA01BA40"; /**
* @Description: 1.数字门店 Aibee-Auth-Sign=sha256(Method + URL + Date + ApiSecret)
* 编码方式: UTF-8;+表示字符串拼接;Date: 请求的时间戳;Method: GET/POST/PUT/DELETE
* URL: 即本文档提供的接口url,不带域名或ip、端口号(举例:/function/updateCustomerTag)。
* ApiSecret: BABBED1ABEC3277092EE0BEE96A6D740
* apiKey: 4EA18E9EFB1F0EB645AD17B6BA01BA40
* @author: zkf
* @date 2020年10月13日
* @param url
* @param json
* @param map map.get("method");
map.get("url");
* @return String
*/
public static String doPostJson(String url, String json,Map<String,String> map) {
// 创建Httpclient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpResponse response = null;
String resultString = "";
try {
// 创建Http Post请求
HttpPost httpPost = new HttpPost(url); // 创建请求内容
StringEntity entity = new StringEntity(json, "utf-8");
entity.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,"application/json"));
httpPost.setEntity(entity);
httpPost.setHeader("Content-type", "application/json");
httpPost.setHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)"); //获得时间戳
String timeData = getTime();
httpPost.setHeader("Date", timeData);
//Aibee-Auth-Sign=sha256(Method + URL + Date + ApiSecret)
String method = map.get("method");
String notIpUrl = map.get("url");
String apiSecret = "BABBED1ABEC3277092EE0BEE96A6D740";
String aibeeAuthSign = method+notIpUrl+timeData+apiSecret; //Sha256加密
aibeeAuthSign = Sha256.getSHA256(aibeeAuthSign,"UTF-8");
httpPost.setHeader("Authorization", apiKey+":"+aibeeAuthSign); // 执行http请求
response = httpClient.execute(httpPost); //获取结果实体
HttpEntity entity = response.getEntity(); if (entity != null) {
//按指定编码转换结果实体为String类型
resultString = EntityUtils.toString(htpEnti, "utf-8");
}
EntityUtils.consume(entity);
//释放链接
response.close();
return resultString; } catch (Exception e) {
e.printStackTrace();
} finally {
try {
response.close();
} catch (IOException e) {
e.printStackTrace();
}
} return resultString;
} /**
* @Description: 返回时间戳
* @author: zkf
* @date 2020年10月13日
* @return String
*/
private static String getTime() {
Date date = new Date();
long time = date.getTime();
return String.valueOf(time);//获得时间戳
} }

【JavaWeb】 接口鉴权的更多相关文章

  1. EasyNVR摄像机网页H5全平台无插件直播流媒体播放服务二次开发之接口鉴权示例讲解

    背景需求 EasyNVR的使用者应该都清楚的了解到,EasyNVR一个强大的功能就是可以进行全平台的无插件直播.主要原因在于rtsp协议的视频流(默认是需要插件才可以播放的)经由EasyNVR处理可以 ...

  2. laravel JWTAuth实现api接口鉴权(基础篇)

    官网:https://jwt-auth.readthedocs.io 参考:https://learnku.com/articles/10885/full-use-of-jwt#99529f 1.to ...

  3. 项目API接口鉴权流程总结

    权益需求对接中,公司跟第三方公司合作,有时我们可能作为甲方,提供接口给对方,有时我们也作为乙方,调对方接口,这就需要API使用签名方法(Sign)对接口进行鉴权.每一次请求都需要在请求中包含签名信息, ...

  4. 接口鉴权之sign签名校验与JWT验证

    需求描述: 项目里的几个Webapi接口需要进行鉴权,同接口可被小程序或网页调用,小程序里没有用户登录的概念,网页里有用户登录的概念,对于调用方来源是小程序的情况下进行放权,其他情况下需要有身份验证. ...

  5. 接口鉴权,提供给第三方调用的接口,进行sign签名

    //场景:公司要跟第三方公司合作,提供接口给对方对接,这样需要对接口进行授权,不然任何人都可以调我们公司的接口,会导致安全隐患: 思路: 在每个接口请求参数都带上ApiKey 和sign签名: 我们在 ...

  6. HiMall 3接口鉴权参考

    签名算法 为了防止API调用过程中被黑客恶意篡改,调用任何一个API都需要携带签名,HOP服务端会根据请求参数,对签名进行验证,签名不合法的请求将会被拒绝.TOP目前支持的签名算法只有一种:MD5(s ...

  7. YAPI接口自动鉴权功能部署详解

    安装准备 以下操作,默认要求自己部署过yapi,最好是部署过yapi二次开发环境. 无论是选择在线安装或者是本地安装,都需要安装client工具. 1.yapi-cli:npm install yap ...

  8. SpringBoot 拦截器妙用,让你一个人开发整个系统的鉴权模块!

    我是陈皮,一个在互联网 Coding 的 ITer,微信搜索「陈皮的JavaLib」第一时间阅读最新文章,回复[资料],即可获得我精心整理的技术资料,电子书籍,一线大厂面试资料和优秀简历模板. Han ...

  9. 接口的鉴权&响应数据解密

    前言: 1.开放的接口为了避免被别人攻击,频繁刷接口,浪费服务器资源,这就涉及到签名(Signature)加密了 2.API 使用签名方法(Signature)对接口进行鉴权(Authenticati ...

  10. python接口自动化22-签名(signature)鉴权(authentication)之加密(HEX、MD5、HMAC-SHA256)

    前言 开放的接口为了避免被别人乱调用,浪费服务器资源,这就涉及到签名(Signature)加密了 API 使用签名方法(Signature)对接口进行鉴权(Authentication).每一次请求都 ...

随机推荐

  1. JavaScript语法形式1行内式

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. 美团面试:说说Netty的零拷贝技术?

    零拷贝技术(Zero-Copy)是一个大家耳熟能详的技术名词了,它主要用于提升 IO(Input & Output)的传输性能. 那么问题来了,为什么零拷贝技术能提升 IO 性能? 1.零拷贝 ...

  3. 如果设备不支持vulkan,就用swiftshader,否则就加载系统的vulkan的正确姿势(让程序能够智能的在vulkan-1.dll和libvk_swiftshader.dll之间切换)

    一些老的显卡设备没有更新驱动,甚至根本就不支持Vulkan的显卡,遇到静态链接的vulkan-1.lib文件,启动exe就会崩溃. 你以为从别的机器拷贝这个vulkan-1.dll就可以了吗? 太傻太 ...

  4. Java第一次blog

    7-1 答题判题程序-1 前言 这些题目主要用到对象与类的处理: 对象是现实世界或抽象概念中的实体在计算机程序中的表示. 类则是具有相同属性和方法的对象的集合,是创建对象的模板.通过类,我们可以定义一 ...

  5. BigDecimal的小数位

    在使用BigDecimal的divide方法进行除法运算时,需要传入两个参数:被除数和除数.如果要对除法结果进行保留小数位数的处理,可以使用该方法的重载形式,传入一个指定小数位数和舍入规则的MathC ...

  6. 什么Java注释

    定义:用于解释说明程序的文字分类: 单行注释:格式: // 注释文字多行注释:格式: /* 注释文字 */ 文档注释:格式:/** 注释文字 */ 作用:在程序中,尤其是复杂的程序中,适当地加入注释可 ...

  7. golang reflect 反射机制的使用场景

    Go语言中的 reflect 包提供了运行时反射机制,允许程序在运行时检查和操作任意对象的数据类型和值. 以下是 reflect 包的一些典型使用场景: 1. 动态类型判断与转换:当需要处理多种类型的 ...

  8. 简约博客新主题Sina上线 - 魔改新浪

    Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` 简约博客新主题Sina上线 - 魔改新浪 日期:2018- ...

  9. libevent之evbuffer

    目录 Evbuffers:缓冲 IO 的实用程序功能 简介 创建或释放 evbuffer Evbuffers 和线程安全 检查 evbuffer 向 evbuffer 添加数据:基础知识 将数据从一个 ...

  10. P9576 题解

    赛时没仔细想,赛后才发现并不难. 将 \(l,r\) 与 \(l',r'\) 是否相交分开讨论. 假若不相交,那么 \(l',r' < l\) 或者 \(l',r' > r\) 并且 \( ...