2009-05-25 141 views
2

我想將Hibernate應用程序集成到專有框架中。我的問題是這個框架以某種方式檢查包的簽名。當我嘗試打電話給我的Hibernate應用程序,我得到以下錯誤:Java安全異常

Caused by: java.lang.SecurityException: class "org.hibernate.dialect.Oracle10gDialect"'s signer information does not match signer information of other classes in the same package 

附加信息:在其休眠工程數據庫是Oracle 10g中,所以這個類是強制性的。

哪個包是「同一包」的意思?它是「org.hibernate.dialect」嗎?

我真正的問題是,我不知道從哪裏開始。 「org.hibernate.dialect」包包含在從Hibernate Core 3.3.1GA取得的「hibernate3.jar」中。他們是否錯誤地簽署了課程?或者是指責框架的提供者,因爲他使用的是同一個jar(我沒有任何關於這個的信息)。

有沒有辦法顯示簽名信息?

謝謝

+0

您是否指定了任何額外的安全策略?此代碼是在Web容器中執行的,還是獨立的應用程序?你能提供更多關於你的類路徑是什麼樣的信息嗎?會不會有一個簽名版本的cglib.jar或類似的東西? – 2009-05-25 11:00:24

+0

@Harry:請參閱下面的解決方案;-) 應該結束此問題嗎? – sebastiangeiger 2009-05-25 11:07:51

回答

1

好吧,我想我解決了它。 該框架的提供者將所有使用的庫重新打包成一個「thirdparty.jar」。獲得這個JAR後,我意識到他們也在使用「org.hibernate.dialect」,但他們不包含「Oracle10gDialect」。 所以每當我打電話給我的Hibernate應用程序時,它都會使用框架的庫,並且在找不到「org.hibernate.dialect.Oracle10gDialect」時會回退到我提供的「org.hibernate.dialect」包。 我想我終於發現了相當於DLL的Java ;-)

我的下一個問題是如何正確管理這種依賴關係。