2012-11-20 4 views
3

gwt를 사용하여 플러그인을 개발하고 싶습니다. 클라이언트 측에서는 키 생성을 위해 java.security. *를 사용해야합니다. 모든 요구 사항을 작성했습니다. 하지만 다음 오류가 표시됩니다.내 gwt 응용 프로그램에서 java.security. *를 가져 오는 방법

로드 모듈

난 내 gwtapp1.gwt.xml 파일에 "java.security.KeyPair의"와 같은 모든 관련 클래스를 상속

Loading inherited module 'coreservlets.GwtApp1' 
    Loading inherited module 'java.security.KeyPair' 
     [ERROR] Unable to find 'java/security/KeyPair.gwt.xml' on your classpath; >could be a typo, or maybe you forgot to include a classpath entry for source? 
    [ERROR] Line 15: Unexpected exception while processing element 'inherits' 

coreservlets.GwtApp1

나는 또한 classpath 자체에 jar를 포함했다. 그러나 여전히 오류는 사라지지 않았다. 내가 여기 을 제안 do.plz한다 무엇 .gwt.xml 파일 <inherits ...>에서 내 자바 코드

package coreservlets.client; 

import java.io.UnsupportedEncodingException; 
import java.security.KeyPair; 
import java.security.KeyPairGenerator; 
import java.security.NoSuchAlgorithmException; 
import java.security.NoSuchProviderException; 
import java.security.PrivateKey; 
import java.security.PublicKey; 
import java.security.SecureRandom; 


public class Keygen { 

private PrivateKey privKey; 
private PublicKey pubKey; 
private static Keygen keygen = null; 

private Keygen() { 

} 

public static Keygen getInstance() { 

    if (keygen == null) { 
     keygen = new Keygen(); 
    } 

    return keygen; 
} 

public void KeyGenerator(String ALGORITHAM) { 
    KeyPairGenerator keyGen = null; 
    SecureRandom random = null; 
    try { 
     keyGen = KeyPairGenerator.getInstance(ALGORITHAM); 
    } catch (NoSuchAlgorithmException ex) { 
     ex.printStackTrace(); 
    } 
    try { 
     random = SecureRandom.getInstance("SHA1PRNG", "SUN"); 
     //random = SecureRandom.getInstance("SHA1PRNG"); 
    } catch (NoSuchAlgorithmException e) { 
     e.printStackTrace(); 

    } catch (NoSuchProviderException ex) { 
     ex.printStackTrace(); 
    } 

    //keyGen.initialize(1024, random); 
    keyGen.initialize(1024); 
    KeyPair key = keyGen.generateKeyPair(); 
    privKey = key.getPrivate(); 
    pubKey = key.getPublic(); 

} 

public String getPubKeyasString() { 
    //return Base64.encodeBase64String(pubKey.getEncoded()); 
    try { 
     return new String(pubKey.getEncoded(),"ISO-8859-1"); 
    } catch (UnsupportedEncodingException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return null; 
} 
public String getPriKeyasString() { 
    //return Base64.encodeBase64String(privKey.getEncoded()); 
    try { 
     return new String(privKey.getEncoded(),"ISO-8859-1"); 
    } catch (UnsupportedEncodingException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return null; 
} 

}

+0

'KeyPair.gwt.xml'에 문제가있는 것 같습니다. 모든 것이 올바른지 확인하거나 여기에 붙여 넣으십시오. –

답변

0

또 다른 .gwt.xml 파일을 참조. 나는 당신이 자바 import ... 대신에 그것을 사용했다고 의심합니다.

java.security.KeyPair 클라이언트 측 GWT를 사용하려면 GWT 컴파일러에서 소스를 사용할 수 있는지 확인해야합니다. 이 작업은 .gwt.xml 파일의 <source path="..." /> 항목을 사용하여 수행됩니다.

당신은 당신이 javax.* 패키지의 어느 것도 표시되지 않습니다 슬프게도 GWT JRE Emulation Reference 페이지를 방문 할 수 있습니다

프로젝트로, 그래서 행운을 지원 ... 아마도 당신은 서버 측에서만 KeyPair를 사용하여 코드를 계속해야합니까?

희망이 있습니다.

+0

도움을 주셔서 감사합니다. 사실 gwt.i에 새로 왔지만 [이 예제] (http://www.vogella.com/articles/GWTModules/article.html)와 같은 gwt 앱을 개발하는 다양한 사례를 보았지만 얻을 수 없습니다. java.security. * jar.could를 사용하는 방법에 대해 더 자세히 설명해주십시오. 감사합니다. – powerPlug

+0

GWT 컴파일러는 클라이언트에있는 모든 클래스마다 소스 코드가 필요합니다. JDK의'src.zip'에서'KeyPair' (및 관련된/참조 된 클래스!)를 추출하여 그 작업을 할 수 있습니다. –

2

키 생성의 경우 gwt-crypto 라이브러리를 사용할 수 있지만 특정 성능 문제와 지원되지 않는 기능에 대비할 수 있습니다.

[편집] 얼마전 jsni를 사용하여 js rsa 솔루션을 성공적으로 배치했습니다. 내가 선택한 js는 jsbn.js 라이브러리

+0

제안 해 주셔서 감사하지만 gwt-chrypto lib.do를 사용하면 다른 방법으로 정렬 할 필요가 없습니다. – powerPlug

+0

불행히도 java.security는 gwt-jre에서 에뮬레이션되지 않으므로 원래 Java 파일 (sun/oracle)을 포함하는 모듈을 만들었지 만 이러한 클래스를 사용할 수 없습니다. jsni 가능한 솔루션을 포함하도록 내 응답을 편집했습니다. –

+0

좋은 점은 jsbn이 심각한 옵션 인 것 같습니다. –

관련 문제