2011-01-06 14 views
6

Sono stato impegnato nella creazione di un'app per Red5. Immagina quale sia stata la mia sorpresa quando ho provato a configurare l'autenticazione di base/digest e non ho potuto. Quello che mi ha colpito come strana è che ho un'istanza di Tomcat in esecuzione che funziona e autentica correttamente con le seguenti XMLs:fa red5 leggere tomcat-users.xml

web.xml (parte di)

<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> 

e tomcat-users.xml in/conf che assomiglia un po 'come questo:

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

La cosa fastidiosa è che la configurazione autentica correttamente quando sul contenitore del servlet di tomcat, ma su quella modificata di red5, continua a chiedere l'autenticazione. Sto diventando pazzo o dovrebbe funzionare come un fascino?

  1. Red5 è la versione 0_9_1
  2. Lo stats.jsp è accessibile in entrambe le servlet container, l'unica differenza è che quando si immette la password corretta e il nome utente nel Tomcat, è effettuato l'accesso, e in red5 non lo sei, mantiene semplicemente chiedendoti la password.

Eventuali indicazioni? Mi sto perdendo qualcosa?

Ecco una traccia dello stack dell'errore che ricevo in questo momento cerco il login:

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 

Inoltre, qui è la configurazione di red5-web.properties

webapp.contextPath=/project 

Anche ulteriori informazioni:

mi sembra che sta usando il regno destra: 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 

Tuttavia, subito dopo bootstraping Tomcat, mi sono presentato con il seguente errore:

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 

Questo errore è un pò strano, perché dopo questo sembra che/WEB-INF/è trovato dal resto del programma il seguente output:

[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] 

ciò che veramente mi infastidisce è che, come si può vedere in uscita, quando provo ad accedere, ottengo un'eccezione JAASRealm-correlati, ma nell'output di debug quando Tomcat è caricamento, mi è chiaro che si aspetta un MemoryRealm. Mi chiedevo dove e come in red5.xml dovrei specificare le proprietà dei bean in modo tale da forzare red5 ad usare MemoryRealm che si trova in /conf/tomcat-users.xml, perché di certo non lo fa ora.

Sembra la più grande domanda che ho postato finora, ma ho cercato di spiegarlo nel modo più completo possibile per evitare confusione.

+0

Non è davvero una risposta alla tua domanda ... ma potrebbe aiutarti ad arrivarci. Sembra che stia cercando il WEB-INF o un altro file da qualche parte inaspettato. Dato che sei su Windows ... dovresti dare a Process Monitor un try & filter su WEB-INF. Dovrebbe essere in grado di vedere se i tuoi file di configurazione sono stati letti/letti, inoltre dovrebbe essere in grado di catturare qualsiasi tentativo di lettura fallito che ti indirizza a qualsiasi direzione per cui potrebbe essere erroneamente tentato di leggere. Ovviamente non sarà di aiuto se sta cercando di leggere i file da un barattolo. -Good Luck – sbaker

+0

Beh, l'ho fatto e sembra che venga analizzato dopo i bootstraps di red5. Tuttavia, quando ho un accesso client, i file non vengono analizzati di nuovo. Conosci gli interni di Tomcat? Dovrebbe analizzare il file ogni volta che un client tenta di autenticare, o il file deve essere analizzato una volta, quando viene distribuita l'applicazione? –

+0

Salve, non sono un esperto di tomcat, ma mi aspetterei che i file vengano letti inizialmente all'avvio (o al primo accesso) e non su ogni tentativo di accesso (solo potenzialmente riletto se il file è stato modificato). Sono stati rilevati tentativi di lettura non riusciti in Process Monitor per la directory WEB-INF a cui fa riferimento lo stacktrace? – sbaker

risposta

2

Per Red5 0.9, provare ad aggiungere questo nodo al proprio 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> 

Se l'XML è ancora non trovato (provate un percorso completo) o la proprietà regno non consente di impostare, vorrei suggerire che l'aggiornamento a 1.0.

+0

Grazie, proverò appena ho un po 'di tempo. –

+1

L'aggiornamento a 1.0 sembrava risolvere automaticamente il problema –

0

Ho visto questo problema numerose volte e, nei nostri sistemi, in genere nascondeva un problema di configurazione. Sei sicuro che tutti i percorsi rilevanti siano impostati, in modo che tutte le tue librerie possano essere correttamente consultate?

Inoltre, la sintassi del modello risorsa, che sembra un po 'interrotta, è possibile sostituire tale impostazione di configurazione con un elenco di tutti i file, invece?

+0

Cosa intendi per "impostazione di configurazione con un elenco di tutti i file, invece?" Suggerite di aggiungere risorse manualmente come sotto il tag ? –

+0

Sì, è corretto. – blueberryfields

+0

Il problema è ancora aperto dal momento che non sono riuscito a trovare alcuna differenza nel caricare manualmente le risorse o nel lasciare il file così com'è. –