2010-01-06 6 views
0

사용자 테이블이있는 MySql 데이터베이스가 있습니다. 이 표에는 보안상의 이유로 사용되는 임의의 토큰이 있습니다. 지금까지 수동으로 행을 추가하여 사용자를 추가했습니다. 토큰은 MD5(Rand())을 사용하여 생성되었습니다.SQL 토큰 생성기를 Java 토큰 생성기로 변경

이제는 사용자가 프로그래밍 방식으로 principal.setToken(whatever)과 같은 것을 추가 할 것입니다. 이전에 사용했던 SQL 코드를 복제하는 가장 쉬운 방법은 무엇입니까? MessageDigest와 util.Random을 사용해야합니까? "YO! 이것을 SQL 코드로 실행하십시오"라고 말할 수있는 방법이 있습니까? 같은 루틴을 계속 사용하려는 경우

+0

좀 더 설명하고 싶을 수 있습니다. ORM이 당신을 위해 계속 존재하는 "주체"가 이제 Java 객체입니까? –

+0

예, principal은 Java 객체입니다. – UmYeah

답변

0

글쎄, 당신은 다음과 같이 SELECT는 SQL에 포장 수 :

SOMETABLE
SELECT MD5(Rand()) from SOMETABLE LIMIT 1; 

은 시스템의 일부 테이블입니다. 방금 시도한 및 MySQL에서 작동합니다. 그런 다음 이것을 java 메소드에서 랩핑하고 해시 값을 리턴 할 수 있습니다. 그러면 이전과 동일한 토큰을 유지하면서 앞으로 이동할 수 있습니다. (당신이 이것을한다면 SOMETABLE이 중대한 임무를 수행하는 중요한 테이블이 아닌지 확인해야합니다.)

한편, MessageDigest와 Random을 사용하는 것을 막을 수있는 방법은 없습니다. 이 링크는 도움이 될 수 있습니다 : herehere.

큰 결과 집합에 대한 충돌 가능성이 당신에게 문제가되지 않는 한, 토큰으로 난수를 사용하지 않을 것입니다. 동일한 값을 여러 번 Rand에서 얻을 수 있습니다/임의. 나는 고유 한 식별자와 난수의 조합으로 MD5 해시를 기반으로 할 것입니다. 전자 메일, 이름, 타임 스탬프, 프로세스 ID, 서버 ID를 무작위 값과 함께 사용하면 고유성을 향상시킬 수 있습니다. 다시 말하지만, 이것은 시스템이 허용 할 수있는 충돌 가능성에 달려 있습니다.

희망이 도움이됩니다.