2017-02-07 1 views
0

나는 데이터베이스에 SMS 또는 전자 메일을 저장할 수있는 grails 응용 프로그램을 작성 중입니다. 이 메시지는 암호화 된 형식으로 저장됩니다.Grails : 암호화 된 열의 키워드를 검색하고 행을 검색하는 방법

키워드 검색 기준을 사용하여 테이블에서 행을 가져 오려고합니다. 암호화되어 있으므로 키워드로 검색 할 수있는 검색어를 찾을 수 없습니다.

도메인 클래스에 transients을 추가하고 암호 해독을 시도했습니다.

도메인 클래스 :

static transients = ['decrypted'] 

String getDecrypted() { 
    return DESCodec.decryptText(message) 
} 

def m2 = Messages.findAll {-1 == it.getDecrypted().indexOf("xyz")}; 

작동하지 않았다 여기에 코드입니다.

암호화 된 열의 키워드를 사용하여 검색하여 행을 가져 오는 방법이 있는지 누군가가 알 수 있습니까?

정말 감사드립니다.

답변

0

이 글 Using transient property in findBy or listOrderBy methods을 읽어 보시기 바랍니다.

기본적으로 일시적인 객체는 객체를 가져야 사용할 수 있습니다. 따라서 hql/hibernate 쿼리를 작성하는 것은 실제로 작동하지 않습니다. 당신은 같은 일을 더 나은 행운을 가질 수있다 : 확실히 이상에

def m2 = Messages.findAll {-1 == DESCodec.decryptText(it.message).contains("xyz")}; 

확실이 뭔가 당신은 주위

여기

당신이

def listing = Messages.executeQuery("from Messages" ,[:],[max:-1]) 
def found = listing.findAll {-1 == it.decrypted.contains("xyz")}; 

또는 수동으로 작업을 수행하려고하는 것입니다 재생해야합니다

def listing = Messages.executeQuery("select new map(id as id, message as message) from Messages" ,[:],[max:-1]) 
    def found = listing.findAll {-1 == DESCodec.decryptText(it.message).contains("xyz")}; 
+0

귀하의 sugggestion에 감사드립니다. 코드가 싫증이났다면 메소드의 서명 없음 : static security.DESCodec.decryptText()가 인수 유형에 적용 가능하다는 오류가 나타납니다. (grails.gorm.DetachedCriteria) values ​​: [[email protected] ] ' – User12111111

+0

실험을해야합니다. 당신이 객체를 가지고있을 때 복호화 된 값을 가지기 때문에 아마도'Messages.findAll(). findAll (-1) == it.decrypted.indexOf ("xyz")};'두 번의 findAll은 이후 grails에서 작동 하는지를 확신 할 수 없습니다. 그러나 모든 객체를 가져와 컬렉션을 통해 확인하는 쿼리가 핵심입니다. 단점은 모든 데이터를 분명히 수집해야한다는 것입니다. – Vahid

+0

네, 그 이유가 있습니다. 모든 데이터를 수집하면 프로세스가 느려집니다. – User12111111

관련 문제