2012-11-07 18 views
7

बिलाव 7.0.32 में इस प्रकार मैं घोंसला रियल्म्स कोशिश कर रहा हूँ (छद्म एक्सएमएल में यहाँ लिखा):बिलाव 7 नेस्टिंग CombinedRealm, LockoutRealm और DataSourceRealm

<CombinedRealm> 
    <LockoutRealm> 
    <DataSourceRealm/> 
    </LockoutRealm> 
    <UserDatabaseRealm/> 
</CombinedRealm> 

यह काम करने के लिए प्रतीत नहीं होता है - है टोमकैट में दो से अधिक स्तरों से घोंसला घूमना संभव है? मैं लॉग में एक चेतावनी मिलती है:

No rules found matching 'Server/Service/Engine/Realm/Realm/Realm'. 

विचार के पीछे है कि वेब सेवा कुछ महत्वपूर्ण उपयोगकर्ताओं है कि उसकी पहुंच से वंचित नहीं किया जाना चाहिए है (उदाहरण के लिए एक डॉस के रूप में) और कुछ सामान्य उपयोगकर्ताओं, जो कमजोर पासवर्ड हो सकता है, जहां लॉकआउट रेमल सक्रिय होना चाहिए। मुझे यकीन है कि अन्य लोग इस स्थिति में रहे हैं।

यदि इसे प्राप्त करने का दूसरा तरीका है (उदाहरण के लिए लॉकआउटरम के लिए श्वेतसूची), तो कृपया मुझे बताएं।

एकल साइन ऑन भी आवश्यक है।

मुझे लगता है कि मौजूदा लॉकआउट रिम कोड को विस्तारित करने वाले खातों की सूची के साथ मौजूदा लॉकआउट रिम कोड को एक विकल्प होगा, लेकिन मैं अपने खुद के दायरे को लिखने के लिए उत्सुक नहीं हूं, इसलिए मैं उस स्तर पर टॉमकैट पर कस्टम कोड नहीं जोड़ूंगा , क्योंकि यह दूसरों के लिए सेटअप जटिल करेगा और प्रत्येक टॉमकैट अपडेट के साथ यह टूट सकता है।

किसी भी मदद के लिए धन्यवाद!

यहाँ अपने परीक्षण config की server.xml के प्रासंगिक हिस्सा है:

<Engine name="Catalina" defaultHost="localhost"> 

    <Realm className="org.apache.catalina.realm.CombinedRealm"> 

    <!-- Lockout realm for the DB users --> 
    <Realm className="org.apache.catalina.realm.LockOutRealm"> 
     <!-- PRIMARY: DataSourceRealm with user DB --> 
     <Realm className="org.apache.catalina.realm.DataSourceRealm" 
     dataSourceName="jdbc/authority" 
     userTable="user" userNameCol="username" 
     userCredCol="password" digest="SHA" 
     userRoleTable="user_role" roleNameCol="rolename" /> 
    </Realm> 

    <!-- FALLBACK: 
     This Realm uses the UserDatabase configured in the global JNDI 
     resources under the key "UserDatabase". Any edits 
     that are performed against this UserDatabase are immediately 
     available for use by the Realm. --> 
    <Realm className="org.apache.catalina.realm.UserDatabaseRealm" 
      resourceName="UserDatabase"/> 

    </Realm> 

    <Host name="localhost" appBase="webapps" 
     unpackWARs="true" autoDeploy="true"> 

    <!-- SingleSignOn valve, share authentication between web applications 
     Documentation at: /docs/config/valve.html --> 
    <Valve className="org.apache.catalina.authenticator.SingleSignOn" /> 

    <!-- Access log processes all example. 
     Documentation at: /docs/config/valve.html 
     Note: The pattern used is equivalent to using pattern="common" --> 
    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" 
      prefix="localhost_access_log." suffix=".txt" 
      pattern="%h %l %u %t &quot;%r&quot; %s %b" /> 

    </Host> 
</Engine> 

उत्तर

3

नए जवाब है: बिलाव 7.0.33 या बाद में करने के लिए

अद्यतन। फिर यह पूरी तरह से काम करता है।

क्रिस्टोफर शल्ट्ज टॉमकैट उपयोगकर्ता सूची में मेरे प्रश्न को आगे बढ़ाने के लिए बहुत दोस्ताना था। महान टोमकैट डेवलपर्स ने तुरंत इस मुद्दे को संबोधित किया है और इसे अगली रिलीज में रखा है। आपका बहुत बहुत धन्यवाद!

तो अब सवाल में या/"प्राथमिकताओं" क्रम भिन्न है इस तरह से एक की तरह एक निर्माण का उपयोग कर सकते हैं:

... 

<Engine name="Catalina" defaultHost="localhost"> 

    <Realm className="org.apache.catalina.realm.CombinedRealm"> 

    <!-- PRIMARY: tomcat-users.xml with critical system users 
        that should always work, DB independent and without lockout 
        NOTE: If the wrong password is given, the secondary path with 
         lockout is still attempted, so that a lockout on that path 
         will still occur and be logged. Still the primary path is not 
         locked for access by that happening.       --> 
    <Realm className="org.apache.catalina.realm.UserDatabaseRealm" 
      resourceName="UserDatabase"/> 

    <!-- SECONDARY: DataSourceRealm with DB with lockout functionality --> 
    <!-- (three level nesting of realms requires Tomcat >= 7.0.33)  --> 
    <Realm className="org.apache.catalina.realm.LockOutRealm" 
     failureCount="5" lockOutTime="60" > <!-- note that when an account is locked correct password 
               login is no longer possible (would otherwise defeat purpose of lockout), 
               but also lockoutTime is still reset in each correct attempt --> 

     <Realm className="org.apache.catalina.realm.DataSourceRealm" 
     dataSourceName="jdbc/authority" 
     userTable="user" userNameCol="username" 
     userCredCol="password" digest="SHA" 
     userRoleTable="user_role" roleNameCol="rolename" /> 

    </Realm> 

    </Realm> 

    <Host > 

    ... 

    </Host> 
</Engine> 

... 

बेशक आप भी अन्य रियल्म्स और अन्य संयोजन का उपयोग कर सकते हैं।

ध्यान दें कि लॉग में एक चीज भ्रामक हो सकती है: इस निर्माण में, यदि प्राथमिक क्षेत्र में संग्रहीत महत्वपूर्ण उपयोगकर्ताओं में से एक के लिए गलत पासवर्ड दिया जाता है, तो प्राथमिक क्षेत्र एक्सेस से इनकार करता है, फिर लॉकआउट के माध्यम से माध्यमिक क्षेत्र दायरे का प्रयास किया जाता है और अंततः उपयोगकर्ता नाम को लॉक करने के लिए पहुंच से इंकार कर देता है।यह लॉकआउट क्षेत्र द्वारा एक चेतावनी के रूप में लॉग किया गया है "लॉक किए गए उपयोगकर्ता को प्रमाणित करने के लिए एक प्रयास किया गया था ..."। अभी भी सही पासवर्ड के साथ, प्राथमिक क्षेत्र के माध्यम से पहुंच काम करता रहता है, क्योंकि यह लॉकआउट क्षेत्र के माध्यम से नहीं जाता है। अर्थात। सभी कार्यों के इरादे से, केवल लॉग संदेश भ्रम पैदा कर सकता है (बेशक यह टालना असंभव है)।

3

अपाचे कॉमन्स-पाचक विन्यास फाइल पार्स करने के लिए प्रयोग किया जाता है, इसलिए मुझे लगता है इस विशेष उपयोग के मामले बस उम्मीद नहीं थी।

टॉमकैट का org.apache.catalina.startup.RealmRuleSet.addRuleInstancesRealm कॉन्फ़िगरेशन के लिए केवल 2-स्तरों के गहरे जाने के लिए कठोर लगता है। वहां एक और परत जोड़ने के लिए काफी सरल लगता है।

मुझे यह देखना होगा कि कैसे डिवीस्टर को कॉन्फ़िगर किया जा सकता है यह देखने के लिए कि मनमानी स्तरों का समर्थन किया जा सकता है, या यदि कुछ सबसेट को मैन्युअल रूप से कॉन्फ़िगर करना होगा।

ऐसे परिवर्तन का अनुरोध करने के लिए Tomcat users' list पर जाने के लिए स्वतंत्र महसूस करें।

+0

क्रिस्टोफर, उत्कृष्ट उत्तर के लिए बहुत बहुत धन्यवाद! इसके अलावा, मैं उपयोगकर्ताओं की सूची पर एक नज़र डालूंगा (संभवतः मेरे पास सब्सक्राइब करने का समय है, केवल मुझे सभी उपयोगकर्ताओं की सूचियों की सदस्यता लेने के लिए कई बार कई अलग-अलग तकनीकों के साथ करना होगा ...)। लगता है जैसे मैं टॉमकैट कोड को बदलने/विस्तार से बचने में सक्षम नहीं होगा, जब तक कि आधिकारिक कोड निकट भविष्य में मनमाने ढंग से घोंसला वाले स्तर का समर्थन नहीं करेगा। अगर मुझे टॉमकैट कोड बदलना शुरू करना है, तो शायद मैं लॉकआउट रीलम को उपयोगकर्ता नाम बहिष्करण विकल्प के साथ बढ़ा दूंगा - या आपको पता चलेगा कि कुछ भी समान है या नहीं? धन्यवाद! – FelixD

+0

मैंने लॉग इन किया है [इसके लिए बग रिपोर्ट] (https://issues.apache.org/bugzilla/show_bug.cgi?id=54141)। –

+0

ग्रेट, धन्यवाद क्रिस्टोफर! यह खुद करने के लिए खेद है, इस समय थोड़ा तनावपूर्ण ... – FelixD

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^