背景

最近工作原因,需要对接GAT1400公有协议,网上资源相较缺乏,记录一下踩过的坑

流程概述

  1. 请求报文和响应报文参见大佬写的文章:

GA-T1400协议–注册注销

  1. 话不多说,上代码,一些说明放到代码后面
@Controller
@RequestMapping("/VIID")
public class MyController {private static final Logger log = LoggerFactory.getLogger(MyController.class);@PostMapping("/System/Register")public ResponseEntity<ResponseGAT> register(HttpServletRequest request) {try {BufferedReader reader = request.getReader();String str = reader.readLine();if (StringUtils.hasLength(str)) {RegisterDTO registerDTO = JSON.parseObject(str, RegisterDTO.class);if (!StringUtils.hasLength(request.getHeader("Authorization"))) { // 首次注册,返回401log.debug("===首次注册===");MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();headers.add("WWW-Authenticate", "Digest realm=\"myrealm\", nonce=\"abc123321\"");headers.add("Content-Type", "application/*+JSON");return new ResponseEntity<>(headers, HttpStatus.UNAUTHORIZED);} else { // 二次注册log.debug("===二次注册===");ResponseGAT response = new ResponseGAT();response.setId(registerDTO.getRegisterObject().getDeviceId());response.setLocalTime(new Date());response.setRequestURL("/VIID/System/Register");response.setStatusCode("O");response.setStatusString("成功注册");LinkedMultiValueMap<String, String> headers = new LinkedMultiValueMap<>();headers.add("Content-Type", "application/*+JSON");return new ResponseEntity<>(response, headers, HttpStatus.OK);}}} catch (IOException e) {e.printStackTrace();}return null;}@PostMapping("/System/Keepalive")public ResponseEntity<ResponseGAT> keepalive(HttpServletRequest request) {log.debug("===设备保活===");try {BufferedReader reader = request.getReader();String str = reader.readLine();if (StringUtils.hasLength(str)) {KeepaliveDTO keepaliveDTO = JSON.parseObject(str, KeepaliveDTO.class);ResponseGAT response = new ResponseGAT();response.setId(keepaliveDTO.getKeepaliveObject().getDeviceId());response.setLocalTime(new Date());response.setRequestURL("/VIID/System/Keepalive");response.setStatusCode("O");response.setStatusString("成功响应");LinkedMultiValueMap<String, String> headers = new LinkedMultiValueMap<>();headers.add("Content-Type", "application/*+JSON");return new ResponseEntity<>(response, headers, HttpStatus.OK);}} catch (IOException e) {e.printStackTrace();}return null;}
}
  1. 代码说明

    • 由于需要自定义返回的响应码,所以用@Controller,返回ResponseEntity
    • SpringMVC只能转换通用的Content-Type(例如application/json等),GAT1400协议使用的是自定义的Content-Type,所以无法自动转换为bean对象,这里使用的方式是通过request对象,以字符流的方式获取请求体中的数据,再利用fastJSON转为bean对象使用
    • 需要注意的是,响应的请求体应该每次都设置为application/*+JSON
    • 在注册时会涉及到Digest加密,WWW-Authenticate的内容,以及第二次注册请求的Authentication字段可能根据设备的不同而有所不同,具体的加密方式请自行搜索

结语

该demo只提供了对接注册和保活的接口的思路,具体代码并不完善,也可能根据设备的不同出现问题,如有问题,请多指正!

对接GA/T1400协议注册流程简易demo【Java版】相关推荐

  1. GAT1400协议 注册流程

    本人最近工作需要对接1400协议,发现网上资料不多,于是自己摸索了一阵,在这给大家提供一些我的见解,我是用C语言写的代码,有需要的可以联系我 公安部制定了统一的标准即GAT1400"公安视频 ...

  2. sip 协议注册流程

    本人主要用于工作笔记,如果有什么写的不对的地方欢迎大家批评指正,如有侵权,请联系本人.我写的是IP话机在注册到SIP服务器的流程. 什么是Sip? 两个话机需要通信,但是只知道对方的号码,这就需要一个 ...

  3. 使用移动代理CMPP2.0,3.0协议实现短信发送-Java版,使用华为smproxy.jar包

    本文使用的是CMPP2.0,CMPP3.0和此逻辑类似,使用的Java类不同而已 1.配置文件 cmpp.xml <config><!--与InfoX建立连接所需参数-->&l ...

  4. 使用window的SMB协议实现局域网文件传输——java版

    前言 简述一下SMB协议 SMB(Server Message Block)通信协议是微软(Microsoft)和英特尔(Intel)在1987年制定的协议,主要是作为Microsoft网络的通讯协议 ...

  5. 简易的Java版 eval()函数

    代码在最底部,请自行提取! 代码说明: 1.允许直接使用,如下: public class EvalTest {public static void main(String[] args) {Stri ...

  6. GA/T 1400协议 - 注册注销流程

    需求:作为下级平台将数据推送至上级平台.第一步需要下级平台向上级平台进行注册/注销. 目录 一.准备材料: 二.注册/注销接口 1.接口文档 2.入参对象 3. 注册/注销请求方法体示例: 三.注册/ ...

  7. 基于GBT28181:SIP协议组件开发-----------第四篇SIP注册流程eXosip2实现(一)

    原创文章,引用请保证原文完整性,尊重作者劳动,原文地址http://www.cnblogs.com/qq1269122125/p/3945294.html. 上章节讲解了利用自主开发的组件SIP组件l ...

  8. 从注册流程 分析如何安全退出多个Activity 多种方式(附DEMO)

      退出Activity注册Android遍历 目录(?)[+] 前言 知识结构 具体方案 方案1 方法采用FLAG_ACTIVITY_CLEAR_TOP退出整个程序多activity 方案2 方法通 ...

  9. 从注册流程 分析如何安全退出多个Activity 多种方式(附DEMO)

    http://blog.csdn.net/vipzjyno1/article/details/25423543 前言 由于一个同学问到我如何按照一个流程走好之后回到首页,我以前看到过4个解决方案,后来 ...

  10. 基于GBT28181:SIP协议组件开发-----------第三篇SIP注册流程分析实现

    原创文章,引用请保证原文完整性,尊重作者劳动,原文地址http://www.cnblogs.com/qq1269122125/p/3941172.html,qq:1269122125. 上两章节简要的 ...

最新文章

  1. spark编程基础--2.3面向对象编程基础
  2. 彻底搞懂视觉-惯性SLAM:基于VINS-Fusion(正式开课)
  3. R语言使用unzip函数解压压缩文件(Extract or List Zip Archives)
  4. 2021年春季学期-信号与系统-第十一次作业参考答案-第二小题
  5. Android 第一篇
  6. 2016届毕业生-毕业设计的相关事项
  7. 检查pandas是否存在一列或者多列
  8. java api cdm文档下载_Java-ORM数据库框架CDM介绍
  9. ensp动态路由ospf基础配置
  10. turnserver开机启动配置
  11. 京东E卡查询绑定助手电脑版APP
  12. pdfjs转图片_Vue项目pdf(base64)转图片
  13. [2020.1.10]systemd介绍
  14. 接口报错500是什么意思_HTTP 500错误是什么意思?
  15. Python读取Excel表格效率对比(openpyxl、xrld、csv)
  16. js全屏和退出全屏代码
  17. Qt 串口通信软件开发教程
  18. 2021常州市程序设计小能手真题及题解
  19. 大学纠结选择计算机专业or软件专业,却不知道选择是否正确!怎么判断?
  20. FASS-K8S云原生全闪存储解决方案

热门文章

  1. Java爬虫-使用爬虫下载千张美女图片!
  2. keli中逻辑分析仪的使用
  3. 锐捷校园网使用python登录
  4. 计算机上安装的游戏怎么删除,win7自带游戏安装包太占内存怎么删除?
  5. 基于kali linux 跑字典暴力破解wifi教程
  6. javaagent技术专利申请
  7. 迅 捷PDF编辑器去水印
  8. ppt转换成pdf软件免费版
  9. Python笔试面试题
  10. 网站生成APP源代码 Flutter项目 带控制端