2011-06-22 83 views
2

我想在Grails中通過SSL驗證發佈一個URL。 我已經導入了證書,並且生成了jks文件。 但似乎Grails沒有找到那些jks文件。 下面是我執行的代碼(這是在一個Grails服務類):Grails中的SSL驗證錯誤

def certificate = "mycert.jks" 

def http = new HTTPBuilder(url) 

def keyStore = KeyStore.getInstance(KeyStore.defaultType) 
getClass().getResource(certificate).withInputStream { 
    keyStore.load(it, "test1234".toCharArray()) 
} 

http.client.connectionManager.schemeRegistry.register(new Scheme("https", new SSLSocketFactory(keyStore), 443)) 

的錯誤是 「不能調用的空對象方法withInputStream()」 所以 方法getResource()方法是不工作,並返回null。

我看到這個代碼在一個functionalTest類中工作正常。

任何人都知道我該如何解決這個問題?

謝謝!!!!!!!

回答

2

問題是,來自grails-app/services的非源文件未被複制到類路徑中。雖然這是src/java的情況,但不是src/groovygrails-app/conf也是這種情況,但這是發生這種情況的唯一的grails-app文件夾,因爲它是配置文件文件夾。

所以你最好的選擇是將文件移動到grails-app/conf和使用

Thread.currentThread().contextClassLoader.getResource(certificate).withInputStream { 
    keyStore.load(it, "test1234".toCharArray()) 
} 
+0

我也試過用Thread.currentThread()。getContextClassLoader()。的getResource(證書),但我仍然有同樣的問題(返回null) – NachoAsking

+0

這是在run-app中,還是在部署的戰爭或單元或集成測試中?另外 - 證書文件位於何處? –

+0

在run-app中,證書位於與服務類別相同的文件夾中 – NachoAsking