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?
- Red5 Version 0_9_1
- 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.
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
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? –
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