Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Java security + Tomcat

3 réponses
Avatar
JScoobyCed
Bonjour,

J'utilise RMI avec Tomcat pour une partie cliente de connection RMI.
Quand je lance l'application, ca me dit qu'il n'y apas de RMI security
et ca ne peut pas trouver les classes remote. J'ai donc mis un
RMISecurityManager, et j'ai donner en option a ma JVM:
-Djava.security.policy=catalina.policy

Ca me trouve bien mes police de securite, excepte pour un detail avec
une librairie externe (quartz scheduler).
Cette librairie lis un fichier quartz.properties dans son propre .jar,
dans un sous repertoire:
quartz.jar:
/org/quartz/quartz.properties
/org/quartz/blabla.class
/org/quartz/blabla1.class
/org/quartz/blabla2.class

Quand je demarre Tomcat, j'ai cette erreur:

java.security.AccessControlException: access denied
(java.io.FilePermission quartz.properties read)
at java.security.AccessControlContext.checkPermission()
at java.security.AccessController.checkPermission()
at java.lang.SecurityManager.checkPermission()
at java.lang.SecurityManager.checkRead()
at java.io.File.exists(File.java:678)
at org.quartz.impl.StdSchedulerFactory.initialize()
...


Comment ajouter ce fichier dans mon catalina.policy ? Ou y-a t'il une
meilleure solution ? Merci.

Cedric

3 réponses

Avatar
Franck Andriano
Bonjour,

Bonjour,

J'utilise RMI avec Tomcat pour une partie cliente de connection RMI.
Quand je lance l'application, ca me dit qu'il n'y apas de RMI security
et ca ne peut pas trouver les classes remote. J'ai donc mis un
RMISecurityManager, et j'ai donner en option a ma JVM:
-Djava.security.policyÊtalina.policy

Ca me trouve bien mes police de securite, excepte pour un detail avec
une librairie externe (quartz scheduler).
Cette librairie lis un fichier quartz.properties dans son propre .jar,
dans un sous repertoire:
quartz.jar:
/org/quartz/quartz.properties
/org/quartz/blabla.class
/org/quartz/blabla1.class
/org/quartz/blabla2.class

Quand je demarre Tomcat, j'ai cette erreur:

java.security.AccessControlException: access denied
(java.io.FilePermission quartz.properties read)
at java.security.AccessControlContext.checkPermission()
at java.security.AccessController.checkPermission()
at java.lang.SecurityManager.checkPermission()
at java.lang.SecurityManager.checkRead()
at java.io.File.exists(File.java:678)
at org.quartz.impl.StdSchedulerFactory.initialize()
...


Comment ajouter ce fichier dans mon catalina.policy ? Ou y-a t'il une
meilleure solution ? Merci.


J'utilise moi aussi Quartz, mon fichier quartz.properties :

#=========================================================================== # Configure ThreadPool
#===========================================================================
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 3
org.quartz.threadPool.threadPriority = 4

#===========================================================================
Selon la doc de quartz le fichier peut se mettre dans le classpath,
je l'ai installé dans /tomcat/shared/classes/quartz.properties

/Franck

--
!

Avatar
euler
JScoobyCed wrote:

Bonjour,

J'utilise RMI avec Tomcat pour une partie cliente de connection RMI.
Quand je lance l'application, ca me dit qu'il n'y apas de RMI security
et ca ne peut pas trouver les classes remote. J'ai donc mis un
RMISecurityManager, et j'ai donner en option a ma JVM:
-Djava.security.policyÊtalina.policy

Ca me trouve bien mes police de securite, excepte pour un detail avec
une librairie externe (quartz scheduler).
Cette librairie lis un fichier quartz.properties dans son propre .jar,
dans un sous repertoire:
quartz.jar:
/org/quartz/quartz.properties
/org/quartz/blabla.class
/org/quartz/blabla1.class
/org/quartz/blabla2.class

Quand je demarre Tomcat, j'ai cette erreur:

java.security.AccessControlException: access denied
(java.io.FilePermission quartz.properties read)
at java.security.AccessControlContext.checkPermission()
at java.security.AccessController.checkPermission()
at java.lang.SecurityManager.checkPermission()
at java.lang.SecurityManager.checkRead()
at java.io.File.exists(File.java:678)
at org.quartz.impl.StdSchedulerFactory.initialize()
...


Comment ajouter ce fichier dans mon catalina.policy ? Ou y-a t'il une
meilleure solution ? Merci.


tu n'indiques pas le contenu de ton fichier policy, mais je suppose d'après
l'erreur indiquée que tu devrais avoir qq part dans ce fichier

permission java.io.FilePermission
"/le/path/au/fichier/quartz.properties", "read";

au milieu d'un bloc grant (enfin dans le bon bloc)


Cedric


Avatar
JScoobyCed
euler wrote:
tu n'indiques pas le contenu de ton fichier policy, mais je suppose d'après
l'erreur indiquée que tu devrais avoir qq part dans ce fichier

permission java.io.FilePermission
"/le/path/au/fichier/quartz.properties", "read";

au milieu d'un bloc grant (enfin dans le bon bloc)


Oui en effet. Mais je n'ai pas trouve la syntaxe pour preciser le "path"
en question se situe dans un fichier .jar

permission java.io.FilePermission
"file:/monpath/quartz.jar$org/quartz/quartz.properties", "read";

ou

permission java.io.FilePermission
"file:/monpath/quartz.jar/org/quartz/quartz.properties", "read";

ou encore

permission java.io.FilePermission
"jar:/monpath/quartz.jar$/org/quartz/quartz.properties", "read";

?

Bon, maintenant ce probleme est resolut car j'ai inclus dans la partie
cliente le _Stub de mon interface Remote.
Le probleme est deplace en fait. Car je dois toujours loader
dynamiquement mes taches clientes sur le server. Et mon serveur c'est
JBoss, et quand je place un RMISecurityManager ca ne lui plait pas.
Suis ouvert a toute proposition.
Pour le moment je defini un fichier policy avec AllPermission sur tout
(pas tres secure, mais le code tourne).

Cedric