0

実行時にクラスの動作を変更するために javaassists を使用しています。コンピューターでアプリを実行すると、すべて正常に動作します。

ただし、このアプリは Java Web Start を使用してユーザーによって起動されるため、アプリの .jar に署名する必要があります。クラスが実行時に javaassists によって変更され、

CtClass.toClass() 

メソッド SecurityException が起動されます。

java.lang.SecurityException: class "com.sch.coberturas.db.CobDao"'s signer information does not match signer information of other classes in the same package

変更されたクラスを単一のクラス パッケージに分離することで回避できますが、これは奇妙な解決策です。別の回避策はありますか?

4

2 に答える 2

1

OPが要求したように、私は自分のコメントに関する回答を作成しています。

SecurityManagerを使用している場合は、使用中の保護されたドメインを常に提供する必要があります。この情報を使用して、javassistは同じ署名情報を持つクラスを生成できるようになります。

これは、を使用する代わりにを使用CtClass.toClass()する必要があることを意味しますClassPool.toClass(CtClass ct, java.lang.ClassLoader loader, java.security.ProtectionDomain domain)

このメソッドの詳細については、javassistjavadocを参照してください

于 2013-03-06T13:14:51.307 に答える