public class DhFluorConstant {/*** APP_ID*/public static final String APP_ID = "xxxxxxxxxxxxxxxxx";/*** SECRET*/public static final String APP_SECRET = "xxxxxxxxxxxxxxxxx";/*** redis 存储accessToken 键*/public static final String REDIS_DH_FLUOR_ACCESSTOKEN_KEY = "DH_FLUOR_ACCESSTOKEN_KEY";/*** 获取乐橙云开放平台AccessToken*/public static final String GETACCESSTOKEN_URL = "https://openapi.lechange.cn/openapi/accessToken";}
@Slf4j
@Component
public class DhFluorTool {@Autowiredprivate RestTemplate restTemplate;@Autowiredprivate RedisCache redisCache;private JSONObject getBaseRequestDate() {long time = System.currentTimeMillis() / 1000;String nonce = UUID.randomUUID().toString();JSONObject data = new JSONObject();data.put("system", new JSONObject().fluentPut("ver", "1.0").fluentPut("appId", DhFluorConstant.APP_ID).fluentPut("sign", getSign(time, nonce)).fluentPut("time", time).fluentPut("nonce", nonce));data.put("id", UUID.randomUUID().toString());return data;}private String getSign(long time, String nonce) {String oriSign = String.format("time:%s,nonce:%s,appSecret:%s", time, nonce, DhFluorConstant.APP_SECRET);return MD5(oriSign);}private String MD5(String str) {char hexDigits[] = { // 用来将字节转换成 16 进制表示的字符'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd','e', 'f'};try {byte[] strTemp = str.getBytes();MessageDigest mdTemp = MessageDigest.getInstance("MD5");mdTemp.update(strTemp);byte tmp[] = mdTemp.digest(); // MD5 的计算结果是一个 128 位的长整数,// 用字节表示就是 16 个字节char strs[] = new char[16 * 2]; // 每个字节用 16 进制表示的话,使用两个字符,// 所以表示成 16 进制需要 32 个字符int k = 0; // 表示转换结果中对应的字符位置for (int i = 0; i < 16; i++) { // 从第一个字节开始,对 MD5 的每一个字节// 转换成 16 进制字符的转换byte byte0 = tmp[i]; // 取第 i 个字节strs[k++] = hexDigits[byte0 >>> 4 & 0xf]; // 取字节中高 4 位的数字转换,// >>> 为逻辑右移,将符号位一起右移strs[k++] = hexDigits[byte0 & 0xf]; // 取字节中低 4 位的数字转换}
//            return new String(strs).toUpperCase(); // 换后的结果转换为字符串return new String(strs); // 换后的结果转换为字符串} catch (Exception e) {return null;}}/*** 获取AccessToken** @return* @throws FluorException*/public String getAccessToken() throws FluorException {String accessToken = redisCache.getCacheObject(DhFluorConstant.REDIS_DH_FLUOR_ACCESSTOKEN_KEY);if (StringUtils.isNotEmpty(accessToken)) {log.info("获取大华AccessToken,缓存获取======" + accessToken);return accessToken;}HttpHeaders headers = new HttpHeaders();headers.set(HttpHeaders.CONTENT_TYPE, "application/json");headers.set(HttpHeaders.ACCEPT_CHARSET, "UTF-8");log.info("获取大华AccessToken入参======" + getBaseRequestDate().toJSONString());HttpEntity<JSONObject> request = new HttpEntity<JSONObject>(getBaseRequestDate(), headers);String response = null;try {String url = DhFluorConstant.GETACCESSTOKEN_URL;response = restTemplate.postForObject(url, request, String.class);} catch (HttpClientErrorException e) {throw new FluorException("获取大华AccessToken请求失败", 500);}JSONObject data = JSON.parseObject(response);log.info("获取大华AccessToken返回信息======" + JSON.toJSONString(data));JSONObject resp = data.getJSONObject("result");if (null == resp) {throw new FluorException("为获取到大华AccessToken返回信息");}if ("0".equals(resp.getString("code"))) {accessToken = resp.getJSONObject("data").getString("accessToken");Long expireTime = resp.getJSONObject("data").getLong("expireTime");redisCache.setCacheObject(DhFluorConstant.REDIS_DH_FLUOR_ACCESSTOKEN_KEY, accessToken, expireTime, TimeUnit.SECONDS);} else {throw new FluorException(resp.getString("msg"), 500);}return accessToken;}}

java 对接乐橙云 获取AccessToken相关推荐

  1. 后端 乐橙云开放平台获取管理员token测试demo

    乐橙云开放平台获取管理员token测试demo 前端页面文档 django配置 测试代码 前端页面文档 html <!DOCTYPE html> <html lang="e ...

  2. vue项目 乐橙云(imouplayer.js)--轻应用直播SDK demo案例(保姆级)

    vue项目 乐橙云(imouplayer.js)--轻应用直播SDK demo测试案例(保姆级) 一.所用到的资源(参数) 1.appId (控制台-我的应用-应用信息中获取) 2.appSecret ...

  3. SkeyeVSS将安防网络摄像机进行类似于萤石云、乐橙云等模式的互联网视频云直播的几种方案

    SkeyeVSS将安防网络摄像机或者NVR进行类似于萤石云.乐橙云等模式的互联网视频云直播的解决方案有几种: 一.RTMP推流的方式 第一步,拉取RTSP流,获取到音视频编码帧数据: 第二步,通过RT ...

  4. vue项目 乐橙云(imouplayer.js)--轻应用直播SDK demo案例

    乐橙云(imouplayer.js) 这边使用的是轻应用直播SDC 实现案例之前,前提我们有2个参数了 player.setup({src: [{url: 'imou://open.lechange. ...

  5. Android端乐橙云SDK集成

    乐橙云官网链接如下:https://open.imoulife.com/ Android端接入SDK链接如下:https://open.imoulife.com/book/opensdk/sdk/an ...

  6. 安防摄像头已分别接入乐橙云、萤石云,如何实现私有云平台的统一管理与向上级联?

    一.背景分析 科技创新对社会发展的重要性不言而喻.对于安防行业来说,人工智能和5G等新技术的应用,已经成为推动智能安防发展的一块关键踏板.从技术维度来看,人工智能.云计算.大数据.物联网等技术在安防视 ...

  7. Java对接腾讯云短信和阿里云天气预报

    API接口提供商 短信 这里推荐阿里云,比起其他的杂牌方便很多 因为现在审核环境的问题,个人开发者比较难申请到签名和模板 我们需要创建一个微信公众号来作为应用场景 在微信官方的公众号平台上面创建 公众 ...

  8. 腾讯直播与 JAVA整合_JAVA对接腾讯云直播如何实现 JAVA对接腾讯云直播实现代码...

    JAVA对接腾讯云直播如何实现?本篇文章小编给大家分享一下JAVA对接腾讯云直播实现代码,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 签名授权 public static ...

  9. 乐橙云24小时存储_【知识专栏】关于大华乐橙云存储的那些秘密…..

    美好的周一 我们又迎来了"乐橙课堂"之"知识专栏" 今天我们的第一课来趴一趴 关于乐橙云存储的那些秘密 乐橙摄像机支持多种存储方式 即云存储.SD卡存储.硬盘录 ...

最新文章

  1. Open/Close Port in Centos
  2. SAP Fiori Elements - Account F4 help - how value help dialog is populated
  3. seo vue 动态路由_VUE项目SEO问题的解决
  4. JavaMail---简介
  5. 函数 的 重载 和 函数 模版
  6. 4 读写文件_WEB安全之SQL注入(4)——读写文件
  7. 【原创】C#实现视频远程监控(下载)
  8. 力士乐电源模块故障代码_REXROTH DRIVE博士力士乐伺服驱动器故障代码大全
  9. tplink无线网卡的linux,Linux系统下怎么用TP-Link的无线网卡?
  10. vscode文件管理只有文件夹的时候也层级显示
  11. Sql Server Update 更新数据
  12. [JAVA]EXCEL工具推荐-MyExcel
  13. cocos creator制作微信抖音小游戏《黄金矿工》
  14. 中国科技大学计算机系导师,中国科学技术大学
  15. 数学建模清风微信公众号的习题答案(挑战篇-完结)
  16. 微软超融合+混合云:源自Azure技术的超融合架构
  17. 一球成谜!咪咕直播联合即构打造世界杯直播答题新玩法
  18. Mysql占用CPU过高排查过程及可能优化方案
  19. 电脑开机进不了系统卡在加载界面怎么办?
  20. pscs6怎么做html模板,怎么在Adobe Photoshop CS6里制作表格模板(PS)怎么画表格

热门文章

  1. 迈向阿尔茨海默病的无创脑刺激2.0时代
  2. Kali安装VMware Tools,解决“安装VMware Tools”灰色按钮问题
  3. 微信小程序与低功耗蓝牙通信-接受硬件端发送来的数据(四)
  4. ElasticSearch 极简入门 CRUD
  5. 高通CES 2018发布QCC5100低功耗蓝牙芯片
  6. lay-submit
  7. 01. Excel_数据处理_基本操作(1)
  8. 抖音AI换脸项目软件开发
  9. 方法的三种调用方式和重载
  10. Oracle数据库用户密码设为无限期