资讯 小学 初中 高中 语言 会计职称 学历提升 法考 计算机考试 医护考试 建工考试 教育百科
栏目分类:
子分类:
返回
空麓网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
空麓网 > 计算机考试 > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: 计算机考试归档 最新发布

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

背景

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

流程概述
    请求报文和响应报文参见大佬写的文章:

GA-T1400协议–注册注销

    话不多说,上代码,一些说明放到代码后面
@Controller
@RequestMapping("/VIID")
public class MyController {

    private static final Logger log = LoggerFactory.getLogger(MyController.class);

    @PostMapping("/System/Register")
    public ResponseEntity 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"))) { // 首次注册,返回401
                    log.debug("===首次注册===");
                    MultiValueMap 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 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 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 headers = new linkedMultiValueMap<>();
                headers.add("Content-Type", "application/*+JSON");
                return new ResponseEntity<>(response, headers, HttpStatus.OK);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}
    代码说明

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

结语

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

转载请注明:文章转载自 http://www.konglu.com/
本文地址:http://www.konglu.com/it/704233.html
免责声明:

我们致力于保护作者版权,注重分享,被刊用文章【对接GA/T1400协议注册流程简易demo【Java版】】因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理,本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们,情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!

我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2023 成都空麓科技有限公司

ICP备案号:蜀ICP备2023000828号-2