2009-06-05 8 views
2

Nous avons un pot fourni par le fournisseur qui contient une classe que nous souhaitons étendre et/ou modifier via AOP. Le modèle de sécurité Sun JVM par défaut n'autorise pas le code non signé ou signé par quelqu'un d'autre à étendre les classes dans un fichier jar signé. Nous pouvons facilement supprimer les signatures du fichier jar, mais je préférerais configurer la JVM pour qu'elle ignore les mesures de sécurité de signature de jar. Cela peut-il être fait? Notez que nous sommes dans un environnement très contrôlé, donc nous sommes relativement indifférents avec le code voyou étant inséré dans les jars fournis par le fournisseur.Comment faire pour JVM ignorer les signatures de jarres

Répondre

2

Je ne suis pas sûr si cela fonctionnera dans votre cas, mais il pourrait. Écrivez votre propre Classloader, mais pas basé sur URLClassLoader, étend juste Classloader et vous résolvez des classes dans votre propre manière.

Charger des classes avec ce classloader et appliquer votre magie AOP, je pourrais dire que cela devrait fonctionner. Ce que j'ai fait était d'implémenter un framework basé sur des plugins et je ne voulais pas signer tout morceau de code (library/plugin), juste les bibliothèques de boot (celle qui charge l'application). Bien sûr, le code que vous exécutez dans votre chargeur de classe doit être fiable car vous contournez certaines des contraintes de sécurité par défaut.

+0

Une bonne idée que je n'avais pas envisagée. Pour nous, l'avantage d'éteindre la sécurité est de nature politique - si les pots ont les mêmes sommes que celles fournies par le vendeur, alors l'excuse de "vous avez changé quelque chose est de votre faute" ne peut pas être aussi facilement un problème de soutien se pose. Un classloader alternatif peut être un fourrage équivalent pour une tentative d'évasion. – ShabbyDoo

+0

Eh bien, si vous voulez étendre une classe qui n'a pas été conçue pour être étendue, vous pourriez rencontrer des problèmes et ils pourraient rejeter votre demande de support :) mais si vous savez ce que vous faites, c'est comme fournir une implémentation différente de certaines classes privées. –

+0

"... pas conçu pour être étendu ..." plus comme "code privé qui ne correspond pas à vos besoins" .Au total, la meilleure approche sera de leur demander de fournir un moyen propre de fournir votre propre mise en œuvre pour un partie spécifique (je ne sais pas ce que la bibliothèque fait, mais il devrait normalement être possible d'avoir plusieurs implémentation) –

Questions connexes