मैं Red5 के लिए एक ऐप बनाने में व्यस्त हूं। कल्पना कीजिए कि जब मैंने मूल/पाचन प्रमाणीकरण को कॉन्फ़िगर करने की कोशिश की तो मैं आश्चर्यचकित था और मैं नहीं कर सका। क्या मुझे के रूप में अजीब मारा कि मैं एक चल बिल्ला उदाहरण है कि काम करता है और निम्नलिखित xmls साथ सही ढंग से प्रमाणित करता है:red5 पढ़ता है tomcat-users.xml
web.xml (के भाग)
<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>
और एक बिल्ला-users.xml में/conf है कि इस तरह थोड़े दिखता है:
<?xml version="1.0" encoding="UTF-8"?>
<tomcat-users>
<role rolename="tomcat"/>
<user username="ide" password="bogus" roles="tomcat"/>
</tomcat-users>
कष्टप्रद बात यह है कि कॉन्फ़िगरेशन सही ढंग से टॉमकैट के सर्वलेट कंटेनर पर प्रमाणीकृत करता है, लेकिन लाल 5 के संशोधित व्यक्ति पर, यह केवल प्रमाणीकरण के लिए पूछता रहता है। क्या मैं पागल हो रहा हूं या इसे एक आकर्षण की तरह काम करना चाहिए?
- Red5 संस्करण 0_9_1
- stats.jsp दोनों सर्वलेट कंटेनर में पहुँचा जा सकता है है, केवल अंतर यह है कि जब आप इनपुट सही पासवर्ड और बिल्ला में उपयोगकर्ता नाम, आप में प्रवेश किया और लाल 5 में आप नहीं हैं, यह सिर्फ आपको पासवर्ड के लिए पूछता है।
कोई बात नहीं? क्या मैं कुछ भूल रहा हूँ?
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
इसके अलावा, यहां red5-web.properties के विन्यास
webapp.contextPath=/project
भी है:
यहाँ त्रुटि मैं पल में प्राप्त की एक स्टैक ट्रेस मैं लॉगिन कोशिश है आगे की जानकारी:
मुझे लगता है जैसे कि यह सही दायरे उपयोग कर रहा है: 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
हालांकि, तुरंत बिलाव bootstraping के बाद, मुझे निम्न त्रुटि के साथ प्रस्तुत कर रहा हूँ:
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
यह त्रुटि, थोड़े अजीब है क्योंकि इस के बाद ऐसा लगता है कि/वेब-INF/के बाकी के द्वारा पाया जाता है
[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]
क्या वास्तव में मुझे गुस्सा दिलाती है कि, जैसा कि आप उत्पादन में देख सकते हैं, जब मैं प्रवेश करने की कोशिश, मैं एक JAASRealm संबंधी अपवाद मिलता है, लेकिन डिबग आउटपुट में बिलाव है जब है: निम्नलिखित उत्पादन से कार्यक्रम लोड हो रहा है, यह मुझे स्पष्ट है कि यह एक मेमोरीरेम की अपेक्षा करता है। मैं सोच रहा था कि red5.xml में कहां और कैसे करें, मुझे बीन गुणों को निर्दिष्ट करना चाहिए जैसे कि मैं Memory5 का उपयोग करने के लिए red5 को मजबूर करता हूं जो /conf/tomcat-users.xml के अंतर्गत है, क्योंकि यह निश्चित रूप से ऐसा नहीं करता है।
ऐसा लगता है कि मैंने अब तक का सबसे बड़ा सवाल पोस्ट किया है, लेकिन मैंने इसे भ्रम से बचने के लिए जितना संभव हो उतना समझाया।
वास्तव में आपके प्रश्न का उत्तर नहीं है ... लेकिन आपको वहां पहुंचने में मदद कर सकता है। ऐसा लगता है कि यह वेब-आईएनएफ या किसी अन्य फ़ाइल को कहीं अप्रत्याशित रूप से ढूंढ रहा है। चूंकि आप विंडोज़ पर हैं ... प्रोसेस मॉनिटर को वेब-आईएनएफ पर कोशिश करने और फ़िल्टर करने के लिए देना चाहिए। यह देखने में सक्षम होना चाहिए कि आपकी कॉन्फ़िगरेशन फ़ाइलों को एक्सेस/पढ़ा जा रहा है या नहीं, किसी भी असफल पढ़ने के प्रयासों को पकड़ने में सक्षम होना चाहिए, जहां कहीं भी यह गलत तरीके से पढ़ने की कोशिश कर रहा हो। बेशक यह मदद नहीं करेगा अगर यह एक जार से फ़ाइलों को पढ़ने की कोशिश कर रहा है। -गुड लक – sbaker
ठीक है मैंने ऐसा किया और ऐसा लगता है कि यह लाल 5 बूटस्ट्रैप्स के बाद पार्स हो जाता है। हालांकि, जब मेरे पास क्लाइंट लॉगिन होता है, तो फ़ाइलों को फिर से पार्स नहीं किया जाता है। क्या आप टोमकैट के आंतरिक जानते हैं? जब भी कोई क्लाइंट प्रमाणीकृत करने का प्रयास करता है, तो फ़ाइल को प्रत्येक बार पार्स करना चाहिए, या जब एप्लिकेशन को तैनात किया जाता है, तो फ़ाइल को एक बार पार्स किया जाना चाहिए? –
हाय, मैं टॉमकैट विशेषज्ञ नहीं हूं - लेकिन मैं उम्मीद करता हूं कि फ़ाइलों को शुरुआत में बूट (या पहले लॉगिन) पर पढ़ा जाए और प्रत्येक लॉगिन प्रयास पर नहीं (केवल फ़ाइल को बदल दिया गया हो तो संभवतः फिर से पढ़ा जा रहा है)। क्या आपने स्टैकट्रैस में संदर्भित वेब-आईएनएफ निर्देशिका के लिए प्रोसेस मॉनिटर में किसी भी असफल पढ़ने के प्रयासों को देखा था? – sbaker