Pourquoi est-gestionnaire Tomcat utilise mon LoginModule?
Question
Je suis en cours d'exécution Tomcat 6.0.29 et a créé un royaume et LoginModule de moi-même. Ils sont définis dans server.xml comme ceci:
<Realm className="mycompany.tomcat.MyRepositoryRealm"
appName="My_Realm"
userClassNames="mycompany.tomcat.IdentityPrincipal"
roleClassNames="mycompany.tomcat.RolePrincipal"
useContextClassLoader="true"/>
J'ai ajouté la bibliothèque contenant ces classes à mon tomcat / lib dossier. A part cela, je n'ai pas changé Tomcat de sa configuration par défaut.
Quand je vais tirer l'application de gestion Tomcat à http://localhost:9080/manager/html
, je ne peux pas connecter et le journal de tomcat affiche une erreur et stacktrace pour mon module de connexion.
Toutes les idées? Merci!
Modifier
Par demande, voici le stacktrace. Mon royaume se connecte à un service JBoss, de sorte que de la raison pour laquelle je reçois l'erreur de NamingContextFactory.
javax.security.auth.login.LoginException: Cannot instantiate class: org.jnp.interfaces.NamingContextFactory
at mycompany.tomcat.MyRepositoryLoginModule.login(MyRepositoryLoginModule.java:88)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at javax.security.auth.login.LoginContext.invoke(LoginContext.java:769)
at javax.security.auth.login.LoginContext.access$000(LoginContext.java:186)
at javax.security.auth.login.LoginContext$4.run(LoginContext.java:683)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:680)
at javax.security.auth.login.LoginContext.login(LoginContext.java:579)
at org.apache.catalina.realm.JAASRealm.authenticate(JAASRealm.java:410)
at org.apache.catalina.realm.JAASRealm.authenticate(JAASRealm.java:335)
at mycompany.tomcat.MyRepositoryRealm.authenticate(MyRepositoryRealm.java:34)
at org.apache.catalina.authenticator.BasicAuthenticator.authenticate(BasicAuthenticator.java:181)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:528)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)
La solution
j'ai pu comprendre le problème.
domaines de sécurité peut être défini pour un moteur, l'hôte ou le contexte. J'avais défini le royaume pour toute l'armée (en server.xml), de sorte que l'application de gestion de tomcat a essayé de l'utiliser. Je fixe le problème en définissant le domaine dans un fichier META-INF / context.xml à l'intérieur de mon application web.