一年前写过一篇,叫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. js 检测文本是否溢出

    自定义指令的方式 手写实现 /** * 检测文本是否溢出 * 参考 https://github.com/ElemeFE/element/blob/dev/packages/table/src/tab ...

  2. 一文了解JVM(中)

    HotSpot 虚拟机对象探秘 对象的创建 Header 解释 使用 new 关键字 调用了构造函数 使用 Class 的 newInstance 方法 调用了构造函数 使用 Constructor ...

  3. 在 Excel 中使用 Python 自动填充公式

    安转Python包的国内镜像源 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple 阿里云 https://mirrors.aliyun.com/pypi/si ...

  4. B站login-极验逆向

    声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 目标网站 https:// ...

  5. nginx resolver 指定多个DNS (2个DNS)

    nginx resolver 指定多个DNS (2个DNS) 直接在 resolver 后边填2个DNS,中间用空格 location / { resolver 223.5.5.5 114.114.1 ...

  6. 微信刷脸SDK获取sub_openid

    当调用SDK中 获取用户信息(getWxpayfaceUserInfo) /人脸支付凭证(getWxpayfaceCode) 方法获取 sub_openid 时,除了SDK自身要传入sub_appid ...

  7. Vue学习:18.Vue插槽

    Vue 中的插槽(slot)是一种灵活的机制,用于在父组件中将内容传递到子组件的特定位置.它允许我们在子组件中定义可以在父组件中传递任意内容的"插槽",从而实现更灵活的组件化. 在 ...

  8. JAVA发送邮件报错: 535 Error: authentication failed, system busy。

    解决方法: 1.设置 -> 微信绑定 -> 开启安全登录 -> 生成新密码 2.使用生成的新密码替换邮箱登录密

  9. jsp表单提交中的逻辑判断

    针对于表单 通常情况下  我们都是表单提交 提交的路径为以下: 提交的按钮的type="submit" 当我们想在表单提交前增加一个逻辑判断   我们就需要把button中的typ ...

  10. js沙雕排序之睡眠排序&随机排序

    1.睡眠排序,只要睡的时间多少就可以排序出来不要在乎时间多少 var arr=[4,77,741,41,142,52,244]; var sleepSort=function(arr,callback ...