2014-03-14 2 views
1

Oracle 데이터베이스를 사용하는 스윙 응용 프로그램이 있습니다. 내 신청서를 구입 한 사람에게는 만료일이 포함 된 라이센스가 제공됩니다. 내 응용 프로그램은 현재 날짜를 만료 날짜와 비교하여 사용자가 사용할 수 있도록합니다.시스템 날짜를 변경하여 만료 날짜를 확인할 수 있습니다.

문제는 구매자가 자신의 데이터베이스를 사용하여 자신의 컴퓨터에 내 응용 프로그램을 자유롭게 배포 할 수 있다는 점입니다. 따라서 만료 확인을 무시하기 위해 시스템 날짜를 변경할 수 있습니다. 내 "현재 날짜"의 출처가 인터넷에서 나온 것이라면 내 응용 프로그램이 오프라인으로 작업 할 수있는 능력이 느슨합니다.

내 애플리케이션이 오프라인으로 작동하는 것을 방지하는 방법을 알고 계십니까?

+0

안녕하세요, 여기에서 논의되는 몇 가지 논리를 사용할 수 있다고 생각합니다. http://stackoverflow.com/questions/1871212/implementing-expiration-dates-in-an-application – Sky

+0

귀하가 채택한 모든 해결책은 불량입니다. 귀하의 제품에 대해 지불하지 않으려는 사람들은 비용을 지불하지 않을 수도 있습니다 제품을 구입하고 30 일 평가판 라이센스를 도입하고 라이센스 정책을 해제하십시오. – Ian

+0

여러분 모두,이 사실을 고객 (이 신청서를 작성하라고 명령 한 분)에게 설명 할 것이므로 여기서는 특별한 것을 할 필요가 없다고 생각합니다. –

답변

1

당신이 할 수있는 한 가지는 모든 프로그램 실행에 대한 현재 날짜의 로그를 내부 구성 파일에 저장하는 것입니다. 첫 번째 날짜는 배포하기 전에 날짜에 클라이언트가 코드를 실행해야하는 것이 아니기 때문에 오늘 배포 할 경우 2014 년 2 월 25 일과 같이 애플리케이션을 배포하는 시점과 가까운 시점에 정의하십시오. 그런 다음 분석 할 수있는 일은 재미있는 일이 날짜와 관련되어 있다는 것입니다 (예를 들어, 날짜가 거꾸로됨을 확인한 경우). 그에 따라 실행을 차단하십시오. (클라이언트가 유효한 이유로 시간을 변경하는 경우 항상 약간의 흔들림 공간을 제공하십시오.)

1

아니요. 폐쇄적 인 알려지지 않은 환경에서이를 수행하는 어리석은 방법은 없습니다. 신뢰할 수있는 시스템 (예 : PHK의 NTP 서버)을 사용하더라도 쉽게 (동일한 시간을 반환하는 NTP 서버로 경로 변경하여) 쉽게 파괴 할 수 있습니다. 신뢰할 수있는 유일한 방법은 응용 프로그램이 실행 된 시간을 추적하는 것입니다. 응용 프로그램이 본질적으로 시계열을 처리하도록 설계되어 있지 않은 한. 어떤 경우에는 정확하다고 가정 할 수 있습니다 (그렇지 않으면 도구가 쓸모가 없습니다).

관련 문제