2011-01-06 21 views
6

He estado ocupado creando una aplicación para Red5. Imagine cuál fue mi sorpresa cuando intenté configurar la autenticación básica/resumida y no pude. Lo que me extraña es como que tengo una instancia de Tomcat en ejecución que funciona y se autentica correctamente con los siguientes XMLs:does red5 read tomcat-users.xml

Web.xml (parte de)

<security-constraint> 
     <web-resource-collection> 
      <web-resource-name>A Protected Page</web-resource-name> 
      <url-pattern>/stats.jsp</url-pattern> 
     </web-resource-collection> 
     <auth-constraint> 
      <description/> 
      <role-name>tomcat</role-name> 
     </auth-constraint> 
    </security-constraint> 
    <login-config> 
     <auth-method>DIGEST</auth-method> 
     <realm-name>BLAAAAAAAAAAAAAAAAA</realm-name> 
    </login-config> 
    <security-role> 
     <description/> 
     <role-name>tomcat</role-name> 
    </security-role> 

y una tomcat-users.xml en/conf que se ve un poco como esto:

<?xml version="1.0" encoding="UTF-8"?> 
<tomcat-users> 
    <role rolename="tomcat"/> 
    <user username="ide" password="bogus" roles="tomcat"/> 
</tomcat-users> 

Lo molesto es que la configuración se autentica correctamente cuando está en el contenedor de servlets de tomcat, pero en la versión modificada del red5, simplemente sigue pidiendo autenticación. ¿Me estoy volviendo loco o debería funcionar como un amuleto?

  1. Red5 es la versión 0_9_1
  2. El stats.jsp es accesible en ambas contenedores de servlets, la única diferencia es que cuando se introduce la contraseña correcta y nombre de usuario en Tomcat, que está en el sistema, y en red5 usted no lo es, solo mantiene pidiéndole la contraseña.

¿Alguna sugerencia? ¿Me estoy perdiendo de algo?

Aquí es un seguimiento de pila del error que recibe en el momento en que intenta la entrada:

Caused by: java.io.IOException: Unable to locate a login configuration 
     at com.sun.security.auth.login.ConfigFile.init(ConfigFile.java:250) [na:1.6.0_22] 
     at com.sun.security.auth.login.ConfigFile.<init>(ConfigFile.java:91) [na:1.6.0_22] 
     ... 27 common frames omitted 
[ERROR] [http-127.0.0.1-5080-1] org.apache.catalina.realm.JAASRealm - Cannot find message associated with key jaasRealm.unexpectedError 
java.lang.SecurityException: Unable to locate a login configuration 
     at com.sun.security.auth.login.ConfigFile.<init>(ConfigFile.java:93) [na:1.6.0_22] 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) [na:1.6.0_22] 
     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) [na:1.6.0_22] 
     at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) [na:1.6.0_22] 
     at java.lang.reflect.Constructor.newInstance(Constructor.java:513) [na:1.6.0_22] 
     at java.lang.Class.newInstance0(Class.java:355) [na:1.6.0_22] 
     at java.lang.Class.newInstance(Class.java:308) [na:1.6.0_22] 
     at javax.security.auth.login.Configuration$3.run(Configuration.java:247) [na:1.6.0_22] 
     at java.security.AccessController.doPrivileged(Native Method) [na:1.6.0_22] 
     at javax.security.auth.login.Configuration.getConfiguration(Configuration.java:242) [na:1.6.0_22] 
     at javax.security.auth.login.LoginContext$1.run(LoginContext.java:237) [na:1.6.0_22] 
     at java.security.AccessController.doPrivileged(Native Method) [na:1.6.0_22] 
     at javax.security.auth.login.LoginContext.init(LoginContext.java:234) [na:1.6.0_22] 
     at javax.security.auth.login.LoginContext.<init>(LoginContext.java:403) [na:1.6.0_22] 
     at org.apache.catalina.realm.JAASRealm.authenticate(JAASRealm.java:394) [catalina-6.0.24.jar:na] 
     at org.apache.catalina.realm.JAASRealm.authenticate(JAASRealm.java:357) [catalina-6.0.24.jar:na] 
     at org.apache.catalina.authenticator.DigestAuthenticator.findPrincipal(DigestAuthenticator.java:283) [catalina-6.0.24.jar:na] 
     at org.apache.catalina.authenticator.DigestAuthenticator.authenticate(DigestAuthenticator.java:176) [catalina-6.0.24.jar:na] 
     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:523) [catalina-6.0.24.jar:na] 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) [catalina-6.0.24.jar:na] 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [catalina-6.0.24.jar:na] 
     at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:555) [catalina-6.0.24.jar:na] 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [catalina-6.0.24.jar:na] 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) [catalina-6.0.24.jar:na] 
     at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852) [tomcat-coyote-6.0.24.jar:na] 
     at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) [tomcat-coyote-6.0.24.jar:na] 
     at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) [tomcat-coyote-6.0.24.jar:na] 
     at java.lang.Thread.run(Thread.java:662) [na:1.6.0_22] 
Caused by: java.io.IOException: Unable to locate a login configuration 
     at com.sun.security.auth.login.ConfigFile.init(ConfigFile.java:250) [na:1.6.0_22] 
     at com.sun.security.auth.login.ConfigFile.<init>(ConfigFile.java:91) [na:1.6.0_22] 
     ... 27 common frames omitted 

Además, aquí es la configuración de red5-web.properties

webapp.contextPath=/project 

Incluso información adicional de entrega:

me parece que se está utilizando el reino derecha: MemoryRealm

[INFO] [main] org.red5.server.tomcat.TomcatLoader - Setting connector: org.apache.catalina.connector.Connector 
[INFO] [main] org.red5.server.tomcat.TomcatLoader - Address to bind: /127.0.0.1:5080 
[INFO] [main] org.red5.server.tomcat.TomcatLoader - Setting realm: org.apache.catalina.realm.MemoryRealm 
[INFO] [main] org.red5.server.tomcat.TomcatLoader - Loading tomcat context 
[INFO] [main] org.red5.server.tomcat.TomcatLoader - Server root: C:/Program Files/Red5 
[INFO] [main] org.red5.server.tomcat.TomcatLoader - Config root: C:/Program Files/Red5/conf 
[INFO] [main] org.red5.server.tomcat.TomcatLoader - Application root: C:/Program Files/Red5/webapps 
[INFO] [main] org.red5.server.tomcat.TomcatLoader - Starting Tomcat servlet engine 
[INFO] [main] org.apache.catalina.startup.Embedded - Starting tomcat server 
[INFO] [main] org.apache.catalina.core.StandardEngine - Starting Servlet Engine: Apache Tomcat/6.0.26 

Sin embargo, inmediatamente después de bootstraping Tomcat, se me presenta el siguiente error:

Exception in thread "Launcher:/administration" org.springframework.beans.factory.BeanDefinitionStoreException: Could not resolve bean definition resource pattern [/WEB-INF/red5-*.xml]; nested exception is java.io.FileNotFoundException: ServletContext resource [/WEB-INF/] cannot be resolved to URL because it does not exist 
     at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:190) 
     at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149) 
     at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:124) 
     at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:93) 
     at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130) 
     at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:458) 
     at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:388) 
     at org.red5.server.tomcat.TomcatLoader$1.run(TomcatLoader.java:594) 
Caused by: java.io.FileNotFoundException: ServletContext resource [/WEB-INF/] cannot be resolved to URL because it does not exist 
     at org.springframework.web.context.support.ServletContextResource.getURL(ServletContextResource.java:132) 
     at org.springframework.core.io.support.PathMatchingResourcePatternResolver.isJarResource(PathMatchingResourcePatternResolver.java:414) 
     at org.springframework.core.io.support.PathMatchingResourcePatternResolver.findPathMatchingResources(PathMatchingResourcePatternResolver.java:343) 
     at org.springframework.core.io.support.PathMatchingResourcePatternResolver.getResources(PathMatchingResourcePatternResolver.java:282) 
     at org.springframework.context.support.AbstractApplicationContext.getResources(AbstractApplicationContext.java:1156) 
     at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:177) 
     ... 7 more 

Este error es un poco extraño, porque después de esto parece que/WEB-INF/se encuentra por el resto de la programa mediante el siguiente resultado:

[INFO] [Launcher:/SOSample] org.springframework.beans.factory.config.PropertyPlaceholderConfigurer - Loading properties file from ServletContext resource [/WEB-INF/red5-web.properties] 
[INFO] [Launcher:/installer] org.springframework.beans.factory.config.PropertyPlaceholderConfigurer - Loading properties file from ServletContext resource [/WEB-INF/red5-web.properties] 
[INFO] [Launcher:/] org.springframework.beans.factory.config.PropertyPlaceholderConfigurer - Loading properties file from ServletContext resource [/WEB-INF/red5-web.properties] 
[INFO] [Launcher:/LiveMedia] org.springframework.beans.factory.config.PropertyPlaceholderConfigurer - Loading properties file from ServletContext resource [/WEB-INF/red5-web.properties] 

lo que realmente me molesta es que, como se puede ver en la salida, cuando intento iniciar sesión, recibo una excepción relacionada JAASRealm-, pero en la salida de depuración cuando Tomcat cargando, es claro para mí que espera un MemoryRealm. Me preguntaba dónde y cómo en red5.xml debería especificar las propiedades de bean de modo que obligue a red5 a usar MemoryRealm que está bajo /conf/tomcat-users.xml, porque ciertamente no lo hace ahora.

Parece la mayor pregunta que he publicado hasta ahora, pero traté de explicarlo lo más posible para evitar confusiones.

+0

No es realmente una respuesta a su pregunta ... pero podría ayudarlo a llegar allí. Parece que está buscando el WEB-INF u otro archivo en algún lugar inesperado. Ya que está en Windows ... debe darle a Process Monitor una prueba y filtro en WEB-INF. Debería poder ver si sus archivos de configuración están siendo accedidos/leídos, también debería poder detectar cualquier intento fallido de lectura que lo apunte a donde pueda estar tratando de leer. Por supuesto, no ayudará si está tratando de leer los archivos de un contenedor. -Buena suerte – sbaker

+0

Bueno, lo hice y parece que se analiza después de bootstraps red5. Sin embargo, cuando tengo un inicio de sesión de cliente, los archivos no se vuelven a analizar. ¿Conoces las partes internas de Tomcat? ¿Debe analizar el archivo cada vez que un cliente intenta autenticarse, o debe analizarse una vez, cuando se implementa la aplicación? –

+0

Hola, no soy un experto en tomcat, pero espero que los archivos se lean inicialmente al arrancar (o al iniciar sesión por primera vez) y no en cada intento de inicio de sesión (solo es posible que se vuelva a leer si se modificó el archivo). ¿Vio algún intento fallido de lectura en Process Monitor para el directorio WEB-INF al que se hace referencia en el stacktrace? – sbaker

Respuesta

2

Para Red5 0.9, intente agregar este nodo a su bean tomcat.server.

<property name="realm"> 
    <bean class="org.apache.catalina.realm.MemoryRealm" lazy-init="true"> 
     <property name="pathname" value="conf/tomcat-users.xml" /> 
    </bean> 
</property> 

Si todavía no se encuentra el código XML (intentar una ruta completa) o la propiedad reino no le permiten establecer que, sugeriría que actualice a 1.0.

+0

Gracias, intentaré pronto ya que tengo un poco de tiempo. –

+1

La actualización a 1.0 pareció resolver automáticamente el problema –

0

He visto este problema en numerosas ocasiones y, en nuestros sistemas, normalmente ocultaba un problema de configuración. ¿Estás seguro de que se han establecido todas las rutas relevantes para que se pueda acceder correctamente a todas tus bibliotecas?

Además, la sintaxis del patrón de recursos, que parece un poco rota, ¿puede reemplazar esa configuración de configuración con una lista de todos los archivos?

+0

¿Qué quiere decir con "configuración de configuración con una lista de todos los archivos?" ¿Sugiere agregar recursos manualmente como en la etiqueta ? –

+0

Sí, eso es correcto. – blueberryfields

+0

El problema aún está abierto por cierto, ya que no pude encontrar ninguna diferencia ya sea que cargue recursos manualmente o deje el archivo como está. –