Nous souhaitons effectuer des appels JMX vers d'autres applications déployées dans WebSphere Application Server. Cela fonctionne très bien si vous le faites dans une application Web où un utilisateur se connecte avec les informations d'identification appropriées. Toutefois, si vous essayez d'effectuer des appels JMX, disons, à partir d'une partie déclenchée par un temporisateur de l'application qui n'a aucune connexion avec un utilisateur connecté, vous obtenez un javax.management.JMRuntimeException: ADMN0022E qui indique que vous n'avez pas les droits utiliser JMX. Donc, ma question est: comment puis-je fournir des informations d'identification à l'opération JMX? Existe-t-il un moyen de "simuler" un login par programme, ou un moyen de fournir un sujet d'authentification tel que l'appel est fait? Et comment puis-je éviter de mettre le nom d'utilisateur et le mot de passe d'un utilisateur réel dans le code/un fichier de propriétés? Dans le cas où cela est important: nous utilisons Websphere 6.1 et travaillons avec Spring.authentification par programmation pour JMX dans Websphere
2
A
Répondre
2
Le IBM WebSphere Application Server V6.1 Security Handbook chapitre 9.6 m'a éclairé:
CallbackHandler loginHandler = new com.ibm.websphere.security.auth.callback.WSCallbackHandlerImpl("username","password");
LoginContext lc = new LoginContext("WSLogin", loginHandler);
lc.login();
Subject subject = lc.getSubject();
PrivilegedAction<Whateverresulttype> action = new PrivilegedAction<Whateverresulttype>() {
public Health run() {
return Health.valueOf(mbean.whatevercall());
}
};
Whateverresulttype res = (Whateverresulttype) com.ibm.websphere.security.auth.WSSubject.doAs(subject, action);
La seule chose que je dois savoir est maintenant comment je peux éviter de mettre les informations d'identification d'un utilisateur réel dans le code. 8-)