개발환경 : egov3.9

 이디러리움 샘플을 가지고 왔다.

nodejs는 자바스크립트 기반이니   json파싱은 일도 아닌데 ㅎㅎㅎ

스프링에서는 경험이 적다보니 시간이 좀 걸렸다

 

공유겸 정리해 놓을려구 한다.

 

해당 트렌젝션의 result값을 VO에 집어 넣고

출력하는 부분을 만들 예정이다.

 

 

ethscan.json 이더리움 송금 트랜젝션

 {
 "status":"1",
 "message":"OK",
 "result":[
  {
   "blockNumber":"4473164",
   "timeStamp":"1542787987",
   "hash":"0xac86d44f53a22e4b12853f5f8234f95b831e1521694c4072fd6a97b219ec3cb7",
   "nonce":"17012682",
   "data": {
    "blockHash":"0x4ee9b9d29f78f7aab230613f8827e9e070d5b60b2cd06d61e83b17aaaa5b1e67",
    "transactionIndex":"54",
    "from":"0x81b7e08f65bdf5648606c89998a9cc8164397647",
    "to":"0xff0797d06e8f9897b1d5066c10d9497ed7054a47"
   },
   "Price": [
    {
     "value":"1000000000000000000",
     "gas":"21000",
     "gasPrice":"1000000000"
    },
    {
     "value":"1000000000000000000",
     "gas":"21000",
     "gasPrice":"1000000000"
    },
    {
     "value":"1000000000000000000",
     "gas":"21000",
     "gasPrice":"1000000000"
    }
   ]
  }
 ]
}

 

 

Json 파싱은 이상한거 쓰지말고 org.json.simple 쓰는게 가장 좋다

pom.xml에 추가 하고

<dependency>
            <groupId>com.googlecode.json-simple</groupId>
            <artifactId>json-simple</artifactId>
            <version>1.1.1</version>
 </dependency>

 

 

 

VO

package egovframework.example.sample.service;

import java.util.List;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;


@Getter
@Setter
@ToString
public class LombokVO {
 


    private String blockNumber;
    private String timeStamp;
    private String hash;
    private String nonce;
    private String blockHash;
    private String transactionIndex;
    private String from;
    private String to;

   
    public Data data;
    class Data{
     private String blockHash;
     private String transactionIndex;
     private String from;
     private String to;
    }
    
    
    public List<Price> Price;
    
    class Price{
     private String value;
     private String gas;
     private String gasPrice;
    }  
}


 

 

 

컨트롤러

package egovframework.example.sample.web;

import java.io.FileReader;
import java.util.List;

import egovframework.example.sample.service.EgovSampleService;
import egovframework.example.sample.service.LombokVO;
import egovframework.example.sample.service.SampleDefaultVO;
import egovframework.example.sample.service.SampleVO;

import egovframework.rte.fdl.property.EgovPropertyService;
import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.support.SessionStatus;
import org.springmodules.validation.commons.DefaultBeanValidator;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;


@Controller
public class EgovSampleController {
 
 
 @RequestMapping(value = "/jsonList.do")
 public String jsonList(SampleVO sampleVO) throws Exception { 
 Object jsonVO = new LombokVO();
 
   
    JSONParser jsonParser = new JSONParser();
    JSONObject jsonObject = (JSONObject) jsonParser.parse(new FileReader("C:\\work-space\\json-test\\jsonsample\\ethscan.json"));

 
    jsonVO =jsonObject.get("result");
   
   
   
 //System.out.println("");
 System.out.println("jsonList : " + jsonVO);
 
 return null;  
 } 

}

 

배열 형식일때는 Array로 VO클래스를 만들고

Object 형식일때는 List로 VO로 만들면 된다.

 

그 뒤로는 알아서 잘 밖힌다.

접근 할때는 일반 클래스 처럼 . 사용하여 접근하면 된다. 

 

 

'자바(Spring)' 카테고리의 다른 글

AsyncRestTemplate Spring boot 비동기  (0) 2021.02.09
ajax 통신  (0) 2020.09.06
블로그 이미지

iesay

,

라디오 버튼 제이쿼리

2020. 8. 24. 15:16

출처 :

https://codepen.io/jaehee/pen/PZKeRy

 

 

<style>
body {margin: 30px;}
body * { margin: 0; padding: 0;}
a {text-decoration: none;}
ul {list-style: none}
li.selected  { width: 500px; background-color: #ddd;}

</style>

<h1>First UL</h1>
<ul id="uldata">
    <li id="lidata"><a href="#none">Lorem ipsum dolor sit amet.</a></li>
    <li id="lidata"><a href="#none">Lorem ipsum dolor sit amet. Lorem ipsum dolor.</a></li>
    <li id="lidata"><a href="#none">Lorem ipsum dolor sit amet.</a></li>
    <li id="lidata"><a href="#none">Lorem ipsum dolor sit amet. Lorem ipsum dolor.</a></li>
</ul>
<br/>
<br/>

 

 

 

<script type="text/javascript">
(function(global, $){
    'use strict';

    var plugin = 'radioClass';
    $.fn[plugin] = $.fn[plugin] || function(className, context) {

            context = context || '';
            var _this = context ? this.closest(context) : this;
            _this.addClass(className);

            var $siblings = _this.siblings();
            $.each($siblings, function(index, item) {
                var _$sibling = $siblings.eq(index);
                if ( _$sibling.hasClass(className) ) {
                    _$sibling.removeClass(className);
                }
            });
            // jQuery 체이닝을 위한 this 반환 설정
            return this;

        }; // 끝: $.fn.radioClass

})(window, window.jQuery);

$(function () {
 console.log($(this.$ul));
    // 접근성을 위해 a 를 클릭하도록 합니다. (탭 포커스 이동시를 고려)
    var $ul = $('ul#uldata');
    $ul.on('click','li#lidata a', function (e) {

        e.preventDefault();
        // a 에 selected 가 되지 않도록 radioClass context 를 li 로 설정
        $(this).radioClass('selected', 'li');
    })
});
</script>

'' 카테고리의 다른 글

ubuntu nginx php mysql 구축  (0) 2021.03.03
DB튜닝 테이블에 데이터가 많은 경우  (0) 2021.01.31
GS인증(보안성)  (7) 2020.04.13
express + morgan  (0) 2019.04.01
promise  (0) 2019.03.28
블로그 이미지

iesay

,

 

 제가 지금 작성한 글은 정답이 아니고 제가  개인적으로 생각하는

여러가지 방법론 중 하나입니다.

 

기본키 : Database  유일키

Private Key : 블록체인상 전자서명을 할수 있는 개인키

 

 

 

수많은 블록체인 회사에서 DID(탈중앙화된 신원식별 시스템) ,

Decentralized Identity 금융사나 통신사 포털 여러 회사에서 진행하고 있다.

기존 공인인증서 방식과 장, 단점을 비교 해보고

거기에 대한 대안을 제시 해볼려구 한다.

 

 항목

공인인증서 

DID(Decentralized Identity)

 RooT CA

필요함 

없슴 

복구방법 

재발급 가능 

 탈중앙화 : 백업(리모닉, 키스토어,PK) 가능

 중앙화 : 키스토어 일괄 저장

 신규 생성   

이력 연계

가능 

 백업 경우 (O)

 신규 생성  (X)

용도

 금융서비스

 신분증, 증명서 발급

 

여기서 가장 중요하게 생각해야 되는 부분이 DID용도가 금융 서비스가 아닌 경우다.

아이핀이나 모바일 인증을 통해서 실명 인증을 하면 CI값이 나온다.

주민번호를 대체한 해쉬 결과인 유일한 값이다. 

우리나라에서는 주민번호, 실명을 변경하면 당연히 CI값도 변경이 된다.

 

DID서비스를 하는 경우 Database  기본키는 무엇을 사용해야 되나 ?

수많은 회사가 여기에 대해 고민을 하고 복구 절차에 대해서 고민 하다보면 답이 없다.

 

휴대폰을 분실 할수도 있고 파손될 우려도 있다.

가장 현실적인 대안은 금융관련 서비스가  아니기 때문에 신규 발급이 가능 하게 하면된다. 

 

휴대폰번호를 통한 실명인증과 메일인증 둘다 받으면 DID private key가 없더라도 강제로 탈퇴시키면 된다. 

 

휴대폰을 분실하고 바뀐번호로 가입한 경우는 방법이 없다.

본인이 예전 번호를 잠시 변경해야지 가능하다.

 

예시) DID 회원정보 테이블

칼럼명

특징

 블록체인 지갑주소

 기본키(서비스 중 세션에 저장)

 이름

 

 생년월일

 

 휴대폰번호 

 유일키 (탈퇴시 auth)

 CI값

 주민번호 대체 유일키 아님 

 이메일 주소

 탈퇴시 auth

 스마트컨트렉주소

 계정당 1개식 LevelDB 데이터기록 

※모바일 Trust Zone 블록체인 private key를 보관한다

생체 정보가 바뀌더라도 모바일 auth통해서 변경한다.

 

이렇게 서비스 하면 한 사람이 번호가 10개면 10개의 계정 생성이 가능하다.

동일한 CI라도   휴대폰 번호를 만들때 오프라인에서 신분증 대조를 받았기 때문에

허용을 해줘도 된다.

 

지갑주소가 다르고 동일한 CI에 대해서 데이터  연계는 되지 않는다.

모든 서비스나 데이터이력은 지갑주소가 작성자와 동일해야지  스마컨트렉

LevelDB의 접근 권한이 생긴다.

 

DID와 공인인증서의 차이는 전자서명하는 주체(Root CA)가 내가 되는건가

아니면 Root CA기관이 되는것인가 그 차이가 가장 크다.

기술적인 PKI기반은 둘다 비슷비슷하다.

 

DID에 금융 서비스가 없이 온라인신분증 용도로만 쓰는 경우 위와

같은 설계가 가능 하지만

금융서비스를 시행 한다면 구조가 완전 바뀌게 된다.

 

 

 

 

블로그 이미지

iesay

,