2011-01-06 3 views
6

Ich war beschäftigt, eine App für Red5 zu erstellen. Stellen Sie sich vor, was meine Überraschung war, als ich versuchte, die basic/Digest-Authentifizierung zu konfigurieren, und das konnte ich nicht. Was mich so seltsam ist, dass ich eine laufende Tomcat-Instanz habe, und authentifiziert korrekt mit der folgenden xmls funktioniert:tut red5 lesen tomcat-users.xml

web.xml (Teil)

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

und ein tomcat-users.xml in/conf die wie folgt aussieht irgendwie:

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

Das Problem ist, dass sich die Konfiguration beim Servlet-Container von Tomcat korrekt authentifiziert, aber bei der modifizierten Version von red5 wird immer nur nach Authentifizierung gefragt. Werde ich verrückt oder sollte es wie ein Zauber wirken?

  1. Red5 Version 0_9_1
  2. Die stats.jsp ist zugänglich in beiden Servlet-Container, der einzige Unterschied ist, dass bei der Eingabe das richtige Passwort und Benutzernamen in tomcat, sind Sie angemeldet und in red5 du bist nicht, es hält nur fragen Sie nach dem Passwort.

Irgendwelche Zeiger? Fehle ich etwas?

Hier ist ein Stack-Trace des Fehlers ich im Moment empfangen versuche ich die 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 

Außerdem ist hier die Konfiguration von red5-web.properties

webapp.contextPath=/project 

Selbst weitere Informationen:

scheinen mir, wie es den richtigen Bereich verwendet: 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 

jedoch sofort Tomcat nach bootstraping, ich bin mit dem folgenden Fehler dargestellt:

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 

Dieser Fehler ist irgendwie seltsam, weil danach scheint es, dass/WEB-INF/durch den Rest der gefunden wird Programm durch die folgende Ausgabe:

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

Was mich wirklich ärgert ist, dass, wie Sie in der Ausgabe sehen können, wenn ich versuche, um sich einzuloggen ich eine JAASRealm bezogene Ausnahme, aber in der Debug-Ausgabe, wenn Tomcat ist Laden ist mir klar, dass es einen MemoryRealm erwartet. Ich frage mich, wo und wie in red5.xml sollte ich Bean-Eigenschaften angeben, so dass ich red5 zwingen, MemoryRealm verwenden, die unter /conf/tomcat-users.xml ist, weil es jetzt sicherlich nicht tut.

Es scheint wie die größte Frage, die ich bisher gepostet habe, aber ich habe versucht, es so vollständig wie möglich zu erklären, um Verwirrung zu vermeiden.

+0

Nicht wirklich eine Antwort auf Ihre Frage ... aber könnte Ihnen helfen, dorthin zu gelangen. Scheint so, als ob es nach dem WEB-INF oder einer anderen Datei irgendwo unerwartet sucht. Da Sie unter Windows sind ... sollte Process Monitor versuchen und Filter auf WEB-INF. Sollte in der Lage zu sehen, ob Ihre Config-Dateien zugegriffen/gelesen werden, sollte auch in der Lage sein, alle fehlgeschlagenen Leseversuche zu fangen, die Sie dorthin führen, wo es versehentlich versuchen könnte, von zu lesen. Natürlich wird es nicht helfen, wenn es versucht, die Dateien aus einem Glas zu lesen. -Glück – sbaker

+0

Nun, ich habe es getan und es scheint, dass es nach red5 Bootstraps geparst wird. Bei einer Clientanmeldung werden die Dateien jedoch nicht erneut analysiert. Kennen Sie die Interna von Tomcat? Soll die Datei jedes Mal analysiert werden, wenn ein Client versucht, sich zu authentifizieren, oder sollte die Datei einmal analysiert werden, wenn die Anwendung bereitgestellt wird? –

+0

Hallo, ich bin kein Tomcat-Experte - aber ich würde erwarten, dass die Dateien beim Start (oder ersten Login) und nicht bei jedem Login-Versuch gelesen werden (nur wenn die Datei geändert wird). Haben Sie in Process Monitor fehlgeschlagene Leseversuche für das WEB-INF-Verzeichnis gesehen, auf das im Stacktrace verwiesen wird? – sbaker

Antwort

2

Versuchen Sie für Red5 0.9, diesen Knoten zu Ihrer tomcat.server-Bean hinzuzufügen.

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

Wenn die XML noch nicht gefunden wird (versuchen Sie einen vollständigen Pfad) oder der Bereich Eigenschaft erlaubt Ihnen nicht, es zu setzen, würde ich vorschlagen, dass Sie auf 1.0 aktualisieren.

+0

Danke, werde es bald versuchen, da ich ein wenig Zeit habe. –

+1

Die Aktualisierung auf 1.0 schien das Problem automatisch zu lösen –

0

Ich habe dieses Problem mehrmals gesehen, und auf unseren Systemen hat es normalerweise ein Konfigurationsproblem versteckt. Sind Sie sicher, dass alle relevanten Pfade festgelegt sind, sodass auf alle Bibliotheken ordnungsgemäß zugegriffen werden kann?

Auch die Ressourcen-Muster-Syntax, die ein wenig kaputt scheint, können Sie diese Konfigurationseinstellung durch eine Liste aller Dateien stattdessen ersetzen?

+0

Was meinen Sie mit "Konfigurationseinstellung mit einer Liste aller Dateien stattdessen?" Schlagen Sie vor, manuell Ressourcen wie unter dem Tag hinzuzufügen? –

+0

Ja, das ist richtig. – blueberryfields

+0

Das Problem ist übrigens immer noch offen, da ich keinen Unterschied feststellen konnte, ob ich manuell Ressourcen lade oder die Datei belasse wie sie ist. –