사업자 번호 유효 여부 크롤링

Python/Base 2023. 6. 5. 09:59 Posted by 퓨어레드

사업자 번호를 이상하게 입력하는 사람들 땜시 홈택스 간단 크롤러를 작업했다

 

def company_no_search(request, company_no: str):
    company_no = company_no.replace("-", "")

    if len(company_no) == 10:

        headers = {'Content-Type': 'text/xml'}

        xml = "<map id='ATTABZAA001R08'><pubcUserNo/><mobYn>N</mobYn><inqrTrgtClCd>1</inqrTrgtClCd><txprDscmNo>" + company_no + "</txprDscmNo><dongCode>05</dongCode><psbSearch>Y</psbSearch><map id='userReqInfoVO'/></map>"

        r = requests.post(
            'https://teht.hometax.go.kr/wqAction.do?actionId=ATTABZAA001R08&screenId=UTEABAAA13&popupYn=false&realScreenId=',
            data=xml, headers=headers)

        if r.status_code == 200:

            tree = elemTree.fromstring(r.text)

            trtEndCd = tree.find('./trtEndCd').text
            state = tree.find('./smpcBmanTrtCntn').text
            description = tree.find('./trtCntn').text

            success = False

            if "등록되어 있는 사업자등록번호 입니다" in state.strip():
                success = True

            r = {"success": success, "company_no": company_no, "end_cd": trtEndCd, "state": state, "message": description}

            new_company = CompanyNoSearch()

            new_company.company_no = company_no
            new_company.trt_end_cd = trtEndCd
            new_company.state = state
            new_company.description = description
            new_company.success = success

            new_company.save()

        else:
            r = {"success": False, "message": "조회 할 수 없습니다"}

    else:
        r = {"success": False, "message": "잘못된 사업자 번호"}

    return HttpResponse(json.dumps(r), content_type="application/json")

 

 

해당 로직만 짤라 냈다 /ㅁ/

 

디펜던시는 requests 를 이용한다.

 

다만 홈텍스니깐.. 너무 마구 날리진 말자 ㅠㅠ

 

SSH Over 설정시 키오류 발생

Devops/젠킨스 2021. 11. 9. 15:09 Posted by 퓨어레드

Publish over SSH, Message "invalid privatekey:"

젠킨스에서 SSH 설정시 제대로 설정했는데 자꾸 해당 오류 발생하면 키 생성 부분에 PEM 옵션을 넣어서 생성하였는지 체크 하여야 한다.

 

 

```

ssh-keygen -t rsa -b 4096 -m PEM

```

 

https://mihamina.rktmb.org/2020/07/jenkins-invalid-privatekey.html

Flex 연습해보기

Web 2019. 11. 9. 11:49 Posted by 퓨어레드

요즘 CSS 는 진짜 신기한게 많은거 같다.. 이전에 테이블로 꾸역꾸역 맞췄던 것들이 웹표준 시대가 오면서

CSS3 로 맞추는거 보면 신기한거 같다. 그중에 역시 대단한건 flex ㅠㅠ

패스트 캠퍼스 금일 공부부분의 코드는 꼭 남기고 싶다.

 

HTML

<div class="container">
  <div class="item">A</div>
  <div class="item">B</div>
  <div class="item">C</div>
  <div class="item">D</div>
  <div class="item">E</div>
  <div class="item">F</div>
  <div class="item">G</div>
  <div class="item">H</div>
  <div class="item">I</div>
  <div class="item">J</div>
  <div class="item">K</div>
  <div class="item">L</div>
  <div class="item">M</div>
</div>

 

CSS

.container {
  border: 4px solid;
  display: flex;
  flex-wrap: wrap;
  height: 400px;
  align-items: baseline;
}

.container .item {
  width: 120px;
  height: 100px;
  background: tomato;
  border: 4px dashed red;
  border-radius: 10px;
  font-size:30px;
  display:flex;
  justify-content: center;
  align-items: center;
}

최근 안드로이드 개발에 감이 떨어질까봐 간단한 앱 프로젝트를 하나 진행해보았다.

 

역시나 DI 와 반복되는 코드가 귀찮기 때문에 AndroidAnnotation 을 적용해볼까 하여 최신 버전을 적용하였는데

 

이상하게 동작이 안된다. 

 

검색하다보니 추가적인 옵션이 필요하다 ㅠㅠ

https://github.com/androidannotations/androidannotations/issues/2191#issuecomment-454318147

 

AA 4.5.2 with build:gradle: 3.3.0 not work · Issue #2191 · androidannotations/androidannotations

AndroidAnnotations version: 4.5.2 Android compile SDK version: 1.8 Android SDK Build-Tools: 28.0.3 com.android.tools.build:gradle:3.3.0 Android Studio: 3.3 Gradle using gradlew: 4.10.1 it work fine...

github.com

 

app 폴더 밑에 있는 build.gradle 에 다음 코드를 추가하자

 

android {
	defaultConfig {
    
    	// 여기 코드를 추가한다.
      javaCompileOptions {
              annotationProcessorOptions {
                  arguments = [
                          "androidManifestFile": "$projectDir/src/main/AndroidManifest.xml".toString()
                  ]
              }
          }
	}
}

 

안드로이드 스튜디오는 항상 업그레이드하면 문제가 생기는거 같다 -_-;;;; 쩝

이전에 올렸던 시칸 체크 클래스와 apscheduler 를 이용하여 주기적 실행 코드를 작성해 보았다.

 

2019/11/07 - [Python/Base] - 시작 시간, 종료 시간 리스트가 현재 시간에 포함되어있는지 체크

 

해당 기능을 이용하려면 apscheduler 를 설치해야 된다.

 

pip install apscheduler

 

아래 코드는 어쩐지 오늘은 님의 코드를 참고하여 시간 체크 클래스를 응용하여 만들었다.

 

원본글

https://zzsza.github.io/development/2018/07/07/python-scheduler/

 

Python Scheduler 만들기(APScheduler)

종종 스케쥴러를 만들어야할 때가 있습니다. 스케쥴러를 만드는 방법은 분산 작업큐를 담당하는 Celery, crontab, Airflow, APScheduler 등 다양하게 존재합니다.

zzsza.github.io

 

Execute!! 부분에 실행 로직을 추가 하면 된다.

from apscheduler.jobstores.base import JobLookupError
from apscheduler.schedulers.background import BackgroundScheduler
import time

from TimeIncludeChk import TimeIncludeChk


class Scheduler:
    def __init__(self, time_chk: TimeIncludeChk):
        self.schedule = BackgroundScheduler()
        self.schedule.start()
        self.job_id = '1MinuteWork'
        self.timeChk = time_chk

    def __del__(self):
        self.shutdown()

    def shutdown(self):
        self.schedule.shutdown()

    def kill_scheduler(self):
        try:
            self.schedule.remove_job(self.job_id)
        except JobLookupError as err:
            print("fail to stop Scheduler: {err}".format(err=err))
            return

    def execute_work(self):

        print("Scheduler process_id[Job] : %d" % (time.localtime().tm_sec,))
        print("is_include_time_now : ", self.timeChk.is_include_time_now())

        if self.timeChk.is_include_time_now():
            print("Execute!!!")

    def scheduler(self):
        print("Scheduler Start")
        self.schedule.add_job(self.execute_work, 'interval', minutes=1, id=self.job_id)


if __name__ == '__main__':

    datas = [
        {'no': 276, 'fountainNo': 'DE0000000007', 'dayWeek': 'MON', 'dayWeekIdx': 0, 'startHour': 9, 'startMin': 0,
         'startTime': '09:00', 'endHour': 9, 'endMin': 50, 'endTime': '09:50', 'inputNo': 18, 'regDate': 1572910002000,
         'offLight': 'Y'},
        {'no': 283, 'fountainNo': 'DE0000000007', 'dayWeek': 'MON', 'dayWeekIdx': 0, 'startHour': 13, 'startMin': 0,
         'startTime': '13:00', 'endHour': 13, 'endMin': 50, 'endTime': '13:50', 'inputNo': 19, 'regDate': 1572910025000,
         'offLight': 'N'},
        {'no': 277, 'fountainNo': 'DE0000000007', 'dayWeek': 'TUE', 'dayWeekIdx': 1, 'startHour': 9, 'startMin': 0,
         'startTime': '09:00', 'endHour': 9, 'endMin': 50, 'endTime': '09:50', 'inputNo': 18, 'regDate': 1572910002000,
         'offLight': 'Y'},
        {'no': 284, 'fountainNo': 'DE0000000007', 'dayWeek': 'TUE', 'dayWeekIdx': 1, 'startHour': 13, 'startMin': 0,
         'startTime': '13:00', 'endHour': 13, 'endMin': 50, 'endTime': '13:50', 'inputNo': 19, 'regDate': 1572910025000,
         'offLight': 'N'},
        {'no': 278, 'fountainNo': 'DE0000000007', 'dayWeek': 'WED', 'dayWeekIdx': 2, 'startHour': 9, 'startMin': 0,
         'startTime': '09:00', 'endHour': 9, 'endMin': 50, 'endTime': '09:50', 'inputNo': 18, 'regDate': 1572910002000,
         'offLight': 'Y'},
        {'no': 285, 'fountainNo': 'DE0000000007', 'dayWeek': 'WED', 'dayWeekIdx': 2, 'startHour': 13, 'startMin': 0,
         'startTime': '13:00', 'endHour': 13, 'endMin': 50, 'endTime': '13:50', 'inputNo': 19, 'regDate': 1572910025000,
         'offLight': 'N'},
        {'no': 286, 'fountainNo': 'DE0000000007', 'dayWeek': 'THU', 'dayWeekIdx': 3, 'startHour': 13, 'startMin': 0,
         'startTime': '13:00', 'endHour': 13, 'endMin': 50, 'endTime': '13:50', 'inputNo': 19, 'regDate': 1572910025000,
         'offLight': 'N'},
        {'no': 279, 'fountainNo': 'DE0000000007', 'dayWeek': 'THU', 'dayWeekIdx': 3, 'startHour': 9, 'startMin': 0,
         'startTime': '09:00', 'endHour': 9, 'endMin': 50, 'endTime': '09:50', 'inputNo': 18, 'regDate': 1572910002000,
         'offLight': 'Y'},
        {'no': 280, 'fountainNo': 'DE0000000007', 'dayWeek': 'FRI', 'dayWeekIdx': 4, 'startHour': 9, 'startMin': 0,
         'startTime': '09:00', 'endHour': 9, 'endMin': 50, 'endTime': '09:50', 'inputNo': 18, 'regDate': 1572910002000,
         'offLight': 'Y'},
        {'no': 287, 'fountainNo': 'DE0000000007', 'dayWeek': 'FRI', 'dayWeekIdx': 4, 'startHour': 13, 'startMin': 0,
         'startTime': '13:00', 'endHour': 13, 'endMin': 50, 'endTime': '13:50', 'inputNo': 19, 'regDate': 1572910025000,
         'offLight': 'N'},
        {'no': 281, 'fountainNo': 'DE0000000007', 'dayWeek': 'SAT', 'dayWeekIdx': 5, 'startHour': 9, 'startMin': 0,
         'startTime': '09:00', 'endHour': 9, 'endMin': 50, 'endTime': '09:50', 'inputNo': 18, 'regDate': 1572910002000,
         'offLight': 'Y'},
        {'no': 288, 'fountainNo': 'DE0000000007', 'dayWeek': 'SAT', 'dayWeekIdx': 5, 'startHour': 13, 'startMin': 0,
         'startTime': '13:00', 'endHour': 13, 'endMin': 50, 'endTime': '13:50', 'inputNo': 19, 'regDate': 1572910025000,
         'offLight': 'N'},
        {'no': 282, 'fountainNo': 'DE0000000007', 'dayWeek': 'SUN', 'dayWeekIdx': 6, 'startHour': 9, 'startMin': 0,
         'startTime': '09:00', 'endHour': 9, 'endMin': 50, 'endTime': '09:50', 'inputNo': 18, 'regDate': 1572910002000,
         'offLight': 'Y'},
        {'no': 289, 'fountainNo': 'DE0000000007', 'dayWeek': 'SUN', 'dayWeekIdx': 6, 'startHour': 13, 'startMin': 0,
         'startTime': '13:00', 'endHour': 13, 'endMin': 50, 'endTime': '13:50', 'inputNo': 19, 'regDate': 1572910025000,
         'offLight': 'N'}
    ]

    chk = TimeIncludeChk()

    chk.set_time_list(datas)

    scheduler = Scheduler(chk)
    scheduler.scheduler()

    count = 0
    while True:
        time.sleep(60)
        count += 1
        if count == 150:
            scheduler.kill_scheduler()
            print("Kill cron Scheduler")

프로젝트를 진행하다보니 매주 몇요일 몇시 몇분 부터 몇시 몇분 까지 스케줄을 짜야 하는 경우가 발생하였다.

 

주단위 반복 스케줄에 이용하면 괜찮을 것 같다

 

set_time_list 에 시간 리스트를 넣어야 되며 형태는 다음과 같다.

 

{
  "dayWeek": "MON",
  "startHour": 9,
  "startMin": 30,
  "endHour": 10,
  "endMin": 20
}

 

체크 클래스

import datetime


class TimeIncludeChk:
    def __init__(self):
        self.week_dict = {}

    def set_time_list(self, time_list):
        for week in range(0, 6 + 1):
            self.week_dict[self.week_idx_to_str(week)] = []

        for t in time_list:
            self.week_dict[t.get("dayWeek")].append(
                {'startHour': t.get("startHour"), 'startMin': t.get("startMin"), 'endHour': t.get("endHour"),
                 'endMin': t.get("endMin")})

    def is_include_time_now(self):
        now = datetime.datetime.now()

        week_idx = self.week_idx_to_str(now.weekday())

        hour = now.hour
        minute = now.minute

        nv = self.eval_hour_min_val(hour, minute)

        for w in self.week_dict.get(week_idx):
            st = self.eval_hour_min_val(w['startHour'], w['startMin'])
            ed = self.eval_hour_min_val(w['endHour'], w['endMin'])

            if st <= nv <= ed:
                return True

        return False

    @staticmethod
    def eval_hour_min_val(hour, min):
        return (hour * 100) + min

    @staticmethod
    def week_idx_to_str(idx: int):
        if idx == 0:
            return "MON"
        elif idx == 1:
            return "TUE"
        elif idx == 2:
            return "WED"
        elif idx == 3:
            return "THU"
        elif idx == 4:
            return "FRI"
        elif idx == 5:
            return "SAT"
        else:
            return "SUN"

 

동작 샘플

from TimeIncludeChk import TimeIncludeChk

datas = [
{'no': 276, 'fountainNo': 'DE0000000007', 'dayWeek': 'MON', 'dayWeekIdx': 0, 'startHour': 9, 'startMin': 0, 'startTime': '09:00', 'endHour': 9, 'endMin': 50, 'endTime': '09:50', 'inputNo': 18, 'regDate': 1572910002000, 'offLight': 'Y'},
{'no': 283, 'fountainNo': 'DE0000000007', 'dayWeek': 'MON', 'dayWeekIdx': 0, 'startHour': 13, 'startMin': 0, 'startTime': '13:00', 'endHour': 13, 'endMin': 50, 'endTime': '13:50', 'inputNo': 19, 'regDate': 1572910025000, 'offLight': 'N'},
{'no': 277, 'fountainNo': 'DE0000000007', 'dayWeek': 'TUE', 'dayWeekIdx': 1, 'startHour': 9, 'startMin': 0, 'startTime': '09:00', 'endHour': 9, 'endMin': 50, 'endTime': '09:50', 'inputNo': 18, 'regDate': 1572910002000, 'offLight': 'Y'},
{'no': 284, 'fountainNo': 'DE0000000007', 'dayWeek': 'TUE', 'dayWeekIdx': 1, 'startHour': 13, 'startMin': 0, 'startTime': '13:00', 'endHour': 13, 'endMin': 50, 'endTime': '13:50', 'inputNo': 19, 'regDate': 1572910025000, 'offLight': 'N'},
{'no': 278, 'fountainNo': 'DE0000000007', 'dayWeek': 'WED', 'dayWeekIdx': 2, 'startHour': 9, 'startMin': 0, 'startTime': '09:00', 'endHour': 9, 'endMin': 50, 'endTime': '09:50', 'inputNo': 18, 'regDate': 1572910002000, 'offLight': 'Y'},
{'no': 285, 'fountainNo': 'DE0000000007', 'dayWeek': 'WED', 'dayWeekIdx': 2, 'startHour': 13, 'startMin': 0, 'startTime': '13:00', 'endHour': 13, 'endMin': 50, 'endTime': '13:50', 'inputNo': 19, 'regDate': 1572910025000, 'offLight': 'N'},
{'no': 286, 'fountainNo': 'DE0000000007', 'dayWeek': 'THU', 'dayWeekIdx': 3, 'startHour': 13, 'startMin': 0, 'startTime': '13:00', 'endHour': 13, 'endMin': 50, 'endTime': '13:50', 'inputNo': 19, 'regDate': 1572910025000, 'offLight': 'N'},
{'no': 279, 'fountainNo': 'DE0000000007', 'dayWeek': 'THU', 'dayWeekIdx': 3, 'startHour': 9, 'startMin': 0, 'startTime': '09:00', 'endHour': 9, 'endMin': 50, 'endTime': '09:50', 'inputNo': 18, 'regDate': 1572910002000, 'offLight': 'Y'},
{'no': 280, 'fountainNo': 'DE0000000007', 'dayWeek': 'FRI', 'dayWeekIdx': 4, 'startHour': 9, 'startMin': 0, 'startTime': '09:00', 'endHour': 9, 'endMin': 50, 'endTime': '09:50', 'inputNo': 18, 'regDate': 1572910002000, 'offLight': 'Y'},
{'no': 287, 'fountainNo': 'DE0000000007', 'dayWeek': 'FRI', 'dayWeekIdx': 4, 'startHour': 13, 'startMin': 0, 'startTime': '13:00', 'endHour': 13, 'endMin': 50, 'endTime': '13:50', 'inputNo': 19, 'regDate': 1572910025000, 'offLight': 'N'},
{'no': 281, 'fountainNo': 'DE0000000007', 'dayWeek': 'SAT', 'dayWeekIdx': 5, 'startHour': 9, 'startMin': 0, 'startTime': '09:00', 'endHour': 9, 'endMin': 50, 'endTime': '09:50', 'inputNo': 18, 'regDate': 1572910002000, 'offLight': 'Y'},
{'no': 288, 'fountainNo': 'DE0000000007', 'dayWeek': 'SAT', 'dayWeekIdx': 5, 'startHour': 13, 'startMin': 0, 'startTime': '13:00', 'endHour': 13, 'endMin': 50, 'endTime': '13:50', 'inputNo': 19, 'regDate': 1572910025000, 'offLight': 'N'},
{'no': 282, 'fountainNo': 'DE0000000007', 'dayWeek': 'SUN', 'dayWeekIdx': 6, 'startHour': 9, 'startMin': 0, 'startTime': '09:00', 'endHour': 9, 'endMin': 50, 'endTime': '09:50', 'inputNo': 18, 'regDate': 1572910002000, 'offLight': 'Y'},
{'no': 289, 'fountainNo': 'DE0000000007', 'dayWeek': 'SUN', 'dayWeekIdx': 6, 'startHour': 13, 'startMin': 0, 'startTime': '13:00', 'endHour': 13, 'endMin': 50, 'endTime': '13:50', 'inputNo': 19, 'regDate': 1572910025000, 'offLight': 'N'}
]

chk = TimeIncludeChk()

chk.set_time_list(datas)

print(chk.is_include_time_now())

 

JavaMail 로 Gmail 보내기

Java/오류해결 2016. 5. 3. 13:31 Posted by 퓨어레드

메일 보내기

@Override

public void send (String toAddr, String subject, String content)
{
   final BaseSetting baseSetting = settingSv.getBaseSetting ();

   // javamail lib 이 필요합니다.
   class MyAuthentication extends Authenticator
   {
      PasswordAuthentication pa;

      public MyAuthentication ()
      {
         pa = new PasswordAuthentication (baseSetting.getCommonEmail (), baseSetting.getCommonEmailPasswd ());  //ex) ID:cafe24@cafe24.com PASSWD:1234
      }

      public PasswordAuthentication getPasswordAuthentication ()
      {
         return pa;
      }
   }

   String host = baseSetting.getSmtpAddr ();              //smtp mail server
   String from = baseSetting.getCommonEmail ();                  //sender email address
   String to = toAddr;                        //receiver email address

   if (StrLib.isEmptyStr (baseSetting.getSmtpAddr ()) || StrLib.isEmptyStr (baseSetting.getCommonEmail ()) || StrLib.isEmptyStr (baseSetting.getCommonEmailPasswd ()))
      return;;

   Properties props = new Properties ();
   props.put ("mail.smtp.host", host);
   props.put ("mail.smtp.auth", "true");
   props.put ("mail.smtp.port", String.valueOf (baseSetting.getSmtpPort ()));

   if (baseSetting.getSmtpPort () == 997 || baseSetting.getSmtpPort () == 465 || baseSetting.getSmtpPort () == 587)
   {
      props.put ("mail.smtp.socketFactory.port", String.valueOf (baseSetting.getSmtpPort ()));
      props.put ("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
      props.put ("mail.smtp.socketFactory.fallback", "false");
      props.put ("mail.smtp.starttls.enable","true");

      props.put ("mail.smtp.user",baseSetting.getCommonEmail ());
   }

   Authenticator auth = new MyAuthentication ();
   Session sess = Session.getInstance (props, auth);

   try
   {
      Message msg = new MimeMessage (sess);
      msg.setFrom (new InternetAddress (from));
      InternetAddress[] address = {new InternetAddress (to)};
      msg.setRecipients (Message.RecipientType.TO, address);
      msg.setSubject (subject);
      msg.setSentDate (new Date ());

      // Multipart 객체 생성
      MimeMultipart multipart = new MimeMultipart ();

      MimeBodyPart part = new MimeBodyPart ();

      // 부가적인 해더 추가
      /**********************************************************/
      msg.setHeader ("MIME-Version" , "1.0" );
      /**********************************************************/

      // 메세지 Part 추가 S
      /**********************************************************/
      part.setContent (content, "text/html;charset=UTF-8");
      part.removeHeader ("Content-Transfer-Encoding");

      // Encoding 타입 추가..
      /**********************************************************/
      part.addHeader ("Content-Transfer-Encoding", "base64");
      /**********************************************************/

      multipart.addBodyPart (part);
      /**********************************************************/
      // 메세지 Part 추가 E

      msg.setContent (multipart);

      Transport.send (msg);
   }
   catch (MessagingException mex)
   {
      mex.printStackTrace ();
   }
}

'Java > 오류해결' 카테고리의 다른 글

JavaMail 사용시 501 Syntax error 해결방법  (0) 2012.05.02

'Web > JavaScript' 카테고리의 다른 글

JavaScript urlencode  (0) 2012.04.25
객체의 모든 어트리뷰트를 출력한다.  (0) 2012.04.18

WatchService 코드 정리

Java/NIO 2013. 1. 5. 12:18 Posted by 퓨어레드
package kr.purred.nioWatch.main;

import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardWatchEventKinds;
import java.nio.file.WatchEvent;
import java.nio.file.WatchEvent.Kind;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;
import java.util.concurrent.TimeUnit;

public class Program
{

	/**
	 * @param args
	 */
	public static void main (String[] args)
	{
		WatchService watchService = null;
		Path path = null;
		
		try
		{
			path = Paths.get ("P:/Dev/Java/Sample/NIO/nioWatch/src/kr/purred/nioWatch/main");
			
			watchService = FileSystems.getDefault ().newWatchService ();
			
			path.register (watchService, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_MODIFY, StandardWatchEventKinds.ENTRY_DELETE);
			
			while (!Thread.interrupted ())
			{
				// 와치 키를 가져오고 큐에서 키를 제거
				WatchKey key = watchService.poll ((long) 1, TimeUnit.SECONDS);
				
				if (key != null)
				{
					for (WatchEvent<?> watchEvent : key.pollEvents ())
					{
						// 미처리 이벤트 수
						System.out.println ("WatchEvent Count : " + watchEvent.count ());
						
						// 이벤트 종류를 가져온다.
						Kind<?> kind = watchEvent.kind ();
						
						// OVERFLOW 이벤트를 처리한다.
						if (kind == StandardWatchEventKinds.OVERFLOW)
							continue;
						
						System.out.println (kind);
						
						WatchEvent<Path> pathWatchEvent = (WatchEvent<Path>) watchEvent;
						
						Path fileName = pathWatchEvent.context ();
						
						System.out.println (fileName.getFileName ());
					}

					System.out.println ("키 Reset");
					
					boolean vaildKey = key.reset ();
					
					if (!vaildKey)
						break;
				}
				else
				{
					System.out.println ("감시중 ...");
				}
			}
			
			watchService.close ();
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
		catch (InterruptedException e)
		{
			e.printStackTrace();
		}
	}

}

XML 암호화 관련 링크

Java/기본 2013. 1. 3. 13:04 Posted by 퓨어레드

1. XML 암호화 문법(W3C)

 

http://www.w3.org/TR/xmlenc-core/

 

2. XML 암호화 관련 링크(소스 및 라이브러리 링크 포함)

 

http://blog.naver.com/hyun43/40016544125

 

3. 정보보안기술의 특징과 종류

 

http://k.daum.net/qna/openknowledge/view.html?qid=3gry5&category_id=DBK004&q=cipher

 

4. J2SE5 에서 XML 전자서명 API 사용하기

 

http://blog.naver.com/celestialorb?Redirect=Log&logNo=40011532325

 

5.  Java 암호화 아키텍쳐 API 의 사양 및 레퍼런스  : JCE(Java cryptography extension) API

 

http://blog.naver.com/havocgood?Redirect=Log&logNo=40039713086

 


 

'Java > 기본' 카테고리의 다른 글

String 형 Date 형으로 파싱하기.  (0) 2012.10.30
Java.. 레이블된 break, continue  (0) 2012.04.18
현재 사용하는 OS 이름 가져오기  (0) 2012.04.18
ByteStream  (0) 2012.04.18
Method 동적 호출  (0) 2012.04.18