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
2
A
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.
Questions connexes
- 1. Comment faire pour Class.forName ignorer minuscules/majuscules
- 2. Faire PHPUnit ignorer les choses?
- 3. signatures JNI pour les classes imbriquées?
- 4. Faire DocumentBuilder.parse ignorer DTD références
- 5. JVM pour WEPOS
- 6. Comment Gmail reconnaît-il les signatures d'e-mail (autrement dit, "Quelle est la meilleure façon de reconnaître les signatures électroniques?")
- 7. comment ignorer les définitions (VS2008)
- 8. Comment supprimer les anciennes signatures des formulaires Outlook?
- 9. Éviter les journaux de plots jvm
- 10. Ignorer les formulaires Authentification automatique rediriger pour vous connecter, Comment?
- 11. Comment ignorer les dossiers SVN dans WinMerge?
- 12. Extension Python C: signatures de méthodes pour la documentation?
- 13. Snapshot JVM calltree pour VisualVM
- 14. Ignorer les espaces blancs
- 15. Comment interpréter cette erreur JVM?
- 16. X.509 Signatures numériques imprimées
- 17. Ignorer les avertissements en permanence
- 18. Comment faire défiler en douceur pour les listes dans Swing
- 19. Obtention de codages de type pour les signatures de méthode dans Cocoa/Objective-C?
- 20. Syntaxe .hgignore pour ignorer uniquement les fichiers, pas les répertoires?
- 21. Ignorer l'analyse de code pour les fichiers générés par SqlMetal
- 22. Ignorer les sauts de ligne dans C
- 23. SQL Import ignorer les doublons
- 24. Ignorer pour modèle global Subversion
- 25. Comment ignorer avec __autoload?
- 26. Changements au niveau du système pour JVM
- 27. Multi java processes de jvm?
- 28. Comment puis-je faire MySQL Fulltext indexation ignorer les chaînes url, en particulier l'extension
- 29. Diff mercurial: ignorer les espaces de fin?
- 30. Swing: comment puis-je ignorer les événements de désélection?
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
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. –
"... 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) –