2011-01-06 11 views
6

Byłem zajęty tworzeniem aplikacji dla Red5. Wyobraź sobie, co było moim zaskoczeniem, gdy próbowałem skonfigurować uwierzytelnianie podstawowe/trawienne i nie mogłem. Co uderzyło mnie jak dziwne jest to, że mam uruchomiony tomcat instancji, który działa poprawnie i uwierzytelnia z następujących plików XML:robi red5 read tomcat-users.xml

web.xml (część)

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

i tomcat-users.xml w/conf, który wygląda trochę jak ten:

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

Wadą jest to, że konfiguracja jest poprawnie uwierzytelniana podczas kontenera serwletu tomcat, ale na zmodyfikowanym serwerze red5, po prostu prosi o uwierzytelnienie. Czy oszaleję, czy powinien działać jak urok?

  1. Red5 jest wersja 0_9_1
  2. stats.jsp jest dostępny w obu kontenerach serwletów, jedyną różnicą jest to, że gdy wejście poprawne hasło i nazwa użytkownika w Tomcat, jesteś zalogowany, a w red5 nie jesteś, po prostu utrzymuje z prośbą o podanie hasła.

Jakieś wskazówki? Czy czegoś brakuje?

Oto ślad stosu błędu otrzymam w tej chwili próbuję logowanie:

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 

Ponadto Oto konfiguracja red5-web.properties

webapp.contextPath=/project 

Nawet informacje o dodatkowych wojsk:

Wydaje mi się, że jest za pomocą odpowiedniego królestwa: 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 

Jednak natychmiast po bootstraping Tomcat, jestem przedstawiony następujący błąd:

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 

Ten błąd jest trochę dziwne, bo po to wydaje się, że/WEB-INF/znajduje się przez resztę z Program przez następujące dane wyjściowe:

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

Co naprawdę mnie denerwuje to, że, jak widać na wyjściu, gdy próbuję się zalogować, otrzymuję wyjątek związany JAASRealm-, ale na wyjściu debugowania gdy Tomcat jest ładowanie, jest dla mnie jasne, że oczekuje pamięci MemoryRealm. Zastanawiam się, gdzie iw jaki sposób w pliku red5.xml powinienem określić właściwości komponentu bean, tak aby zmusić red5 do korzystania z MemoryRealm, który znajduje się pod /conf/tomcat-users.xml, ponieważ na pewno nie robi tego teraz.

Wydaje się, że to największe pytanie, jakie dotąd wysunąłem, ale starałem się wyjaśnić to tak dokładnie, jak to możliwe, aby uniknąć nieporozumień.

+0

Naprawdę nie jest to odpowiedź na twoje pytanie ... ale może ci pomóc. Wygląda na to, że szuka WEB-INF lub innego pliku gdzieś niespodziewanego. Ponieważ jesteś w systemie Windows ... powinieneś dać monitorowi procesu try & filter na WEB-INF. Powinien być w stanie sprawdzić, czy twoje pliki konfiguracyjne są dostępne/odczytane, powinien także być w stanie złapać wszelkie nieudane próby odczytu wskazujące, gdzie błędnie próbuje je odczytać. Oczywiście to nie pomoże, jeśli próbuje odczytać pliki ze słoika. -Dobre Szczęście – sbaker

+0

Cóż, zrobiłem to i wygląda na to, że zostanie sparsowane po bootstrapach red5. Jednak, gdy mam login klienta, pliki nie zostaną ponownie przeanalizowane. Czy znasz wnętrze tomcat? Czy powinien parsować plik za każdym razem, gdy klient próbuje uwierzytelnić, czy plik powinien zostać przeanalizowany jeden raz, gdy aplikacja zostanie wdrożona? –

+0

Witam, nie jestem ekspertem od tomcat - ale spodziewałbym się, że pliki będą odczytywane początkowo podczas rozruchu (lub pierwszego logowania), a nie przy każdej próbie zalogowania (tylko potencjalnie zostanie ponownie odczytany, jeśli plik został zmieniony). Czy widzisz jakieś nieudane próby odczytu w Monitorze procesu dla katalogu WEB-INF wymienionego w stosie? – sbaker

Odpowiedz

2

Dla wersji Red5 0.9, spróbuj dodać ten węzeł do komponentu 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> 

Jeśli xml nie jest jeszcze znaleźć (spróbuj pełną ścieżkę) lub właściwość sfera nie pozwalają ustawić go, chciałbym zaproponować, aby uaktualnić do 1,0.

+0

Dzięki, spróbuję wkrótce, ponieważ mam trochę czasu. –

+1

Aktualizacja do wersji 1.0 wydawała się automatycznie rozwiązać problem –

0

Widziałem ten problem wiele razy, a na naszych systemach zwykle ukrywał problem z konfiguracją. Czy jesteś pewien, że wszystkie odpowiednie ścieżki są ustawione, aby wszystkie twoje biblioteki mogły być poprawnie dostępne?

Ponadto, składnia wzorca zasobów, która wydaje się nieco zepsuta, zamiast tego można zastąpić to ustawienie konfiguracji listą wszystkich plików?

+0

Co rozumiesz przez "ustawienie konfiguracyjne z listą wszystkich plików?" Czy sugerujesz dodawanie ręcznych zasobów zgodnie z tagiem ? –

+0

Tak, zgadza się. – blueberryfields

+0

Problem nadal jest otwarty, ponieważ nie mogłem znaleźć żadnej różnicy, czy ręcznie ładuję zasoby, czy pozostawiam plik taki, jaki jest. –