¿Por qué es gestor de Tomcat usando mi LoginModule?
Pregunta
Estoy corriendo Tomcat 6.0.29 y creó un reino y LoginModule de mi propia. Se definen en server.xml de esta manera:
<Realm className="mycompany.tomcat.MyRepositoryRealm"
appName="My_Realm"
userClassNames="mycompany.tomcat.IdentityPrincipal"
roleClassNames="mycompany.tomcat.RolePrincipal"
useContextClassLoader="true"/>
He añadido la biblioteca que contiene estas clases a mi carpeta Tomcat / lib. Aparte de eso, no he cambiado Tomcat desde su configuración por defecto.
Cuando voy a encender la aplicación de administración de Tomcat en http://localhost:9080/manager/html
, no puedo iniciar sesión y los espectáculos de registro Tomcat un error y StackTrace para mi módulo de inicio de sesión.
Algunas ideas? Gracias!
Editar
Por la petición, aquí está el StackTrace. Mi reino conecta a un servicio de JBoss, así que por eso me sale el error 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)
Solución
I fue capaz de averiguar el problema.
reinos de seguridad se puede definir para un motor, anfitrión, o el contexto. Yo había definido el ámbito de toda la serie (en server.xml), por lo que la aplicación de administración de Tomcat estaba tratando de usarlo. He arreglado el problema mediante la definición del reino en una META-INF / context.xml archivo dentro de mi aplicación web.