2011-01-06 23 views
6

Tôi đã bận tạo một ứng dụng cho Red5. Hãy tưởng tượng những gì là sự ngạc nhiên của tôi khi tôi đã cố gắng để cấu hình xác thực cơ bản/tiêu hóa và tôi không thể. gì đánh tôi như lạ là tôi có một trường hợp tomcat chạy mà làm việc và xác nhận một cách chính xác với XMLs sau:hiện red5 đọc tomcat-users.xml

web.xml (một phần của)

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

tomcat-users.xml trong/conf trông giống như sau:

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

Điều gây phiền nhiễu là cấu hình xác thực một cách chính xác khi trên thùng chứa servlet của tomcat, nhưng trên bộ sửa đổi của redcat, nó chỉ yêu cầu xác thực. Tôi có trở nên điên khùng hay nó sẽ hoạt động như một sự quyến rũ?

  1. Red5 là phiên bản 0_9_1
  2. Các stats.jsp có thể truy cập vào cả hai container servlet, chỉ khác biệt là khi bạn nhập vào đúng mật khẩu và tên người dùng trong tomcat, bạn đã đăng nhập, và trong red5 bạn không, nó chỉ giữ yêu cầu bạn nhập mật khẩu.

Mọi con trỏ? Tui bỏ lỡ điều gì vậy?

Đây là một stack trace của lỗi tôi nhận được vào lúc này tôi cố gắng đăng nhập:

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 

Bên cạnh đó, đây là cấu hình của red5-web.properties

webapp.contextPath=/project 

Thậm chí biết thêm thông tin:

Dường như với tôi như nó đang sử dụng các lĩnh vực phải: 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 

Tuy nhiên, ngay sau khi bootstraping Tomcat, tôi trình bày với các lỗi sau:

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 

Lỗi này là kinda lạ, bởi vì sau này có vẻ như/WEB-INF/được tìm thấy bởi phần còn lại của chương trình bằng cách cho kết quả sau:

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

Điều gì thực sự làm phiền tôi là, như bạn có thể nhìn thấy trong đầu ra, khi tôi cố gắng đăng nhập, tôi nhận được một ngoại lệ JAASRealm liên quan, nhưng trong kết xuất debug khi Tomcat tải, nó là rõ ràng với tôi rằng nó mong đợi một MemoryRealm. Tôi đã tự hỏi ở đâu và như thế nào trong red5.xml tôi nên xác định các thuộc tính bean như vậy mà tôi buộc red5 để sử dụng MemoryRealm đó là dưới /conf/tomcat-users.xml, bởi vì nó chắc chắn không làm như vậy bây giờ.

Dường như đây là câu hỏi lớn nhất mà tôi đã đăng cho đến nay, nhưng tôi đã cố gắng giải thích nó hết mức có thể để tránh nhầm lẫn.

+0

Không thực sự là câu trả lời cho câu hỏi của bạn ... nhưng có thể giúp bạn đạt được điều đó. Có vẻ như nó đang tìm kiếm WEB-INF hoặc một tệp khác ở đâu đó bất ngờ. Vì bạn đang sử dụng Windows ... nên cho Process Monitor một thử và lọc trên WEB-INF. Nên có thể xem các tập tin cấu hình của bạn đang được truy cập/đọc, cũng sẽ có thể bắt bất kỳ nỗ lực đọc không thành công chỉ cho bạn bất cứ nơi nào nó có thể bị nhầm lẫn cố gắng để đọc từ. Tất nhiên nó sẽ không giúp đỡ nếu nó đang cố gắng để đọc các tập tin từ một cái lọ. -Mùa may mắn – sbaker

+0

Tôi đã làm điều đó và có vẻ như nó được phân tích cú pháp sau khi khởi động red5. Tuy nhiên, khi tôi có một đăng nhập khách hàng, các tập tin không được phân tích cú pháp một lần nữa. Bạn có biết bên trong của tomcat? Có nên phân tích cú pháp tệp mỗi khi một khách hàng cố gắng xác thực hay tệp đó sẽ được phân tích cú pháp một lần khi ứng dụng được triển khai? –

+0

Xin chào, tôi không phải là chuyên gia tomcat - nhưng tôi mong đợi các tệp được đọc ban đầu khi khởi động (hoặc lần đăng nhập đầu tiên) chứ không phải trên mỗi lần đăng nhập (chỉ có khả năng được đọc lại nếu tệp đã được thay đổi). Bạn có thấy bất kỳ nỗ lực đọc không thành công nào trong Process Monitor cho thư mục WEB-INF được tham chiếu trong stacktrace không? – sbaker

Trả lời

2

Đối với Red5 0.9, hãy thử thêm nút này vào bean tomcat.server của bạn.

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

Nếu không tìm thấy xml (thử đường dẫn đầy đủ) hoặc thuộc tính lĩnh vực không cho phép bạn đặt, tôi khuyên bạn nên nâng cấp lên 1.0.

+0

Cảm ơn, sẽ cố gắng sớm vì tôi có một ít thời gian. –

+1

Cập nhật lên 1.0 dường như giải quyết tự động vấn đề –

0

Tôi đã gặp sự cố này nhiều lần và trên các hệ thống của chúng tôi, nó thường ẩn một vấn đề về cấu hình. Bạn có chắc chắn rằng tất cả các đường dẫn có liên quan được thiết lập để tất cả các thư viện của bạn có thể được truy cập đúng không?

Ngoài ra, cú pháp mẫu tài nguyên, có vẻ như bị hỏng một chút, bạn có thể thay thế cài đặt cấu hình đó bằng danh sách tất cả các tệp không?

+0

Bạn có ý nghĩa gì bởi "cài đặt cấu hình với danh sách tất cả các tệp, thay vào đó?" Bạn có đề xuất thêm tài nguyên theo cách thủ công dưới thẻ không? –

+0

Vâng, đúng vậy. – blueberryfields

+0

Sự cố vẫn mở theo cách mà tôi không thể tìm thấy bất kỳ sự khác biệt nào cho dù tôi tải tài nguyên theo cách thủ công hay để nguyên tệp như vậy. –

Các vấn đề liên quan