2011-10-11 8 views
8

मेरे पास टॉमकैट प्रबंधक तक पहुंच है और युद्ध-फाइल अपलोड कर सकते हैं। इनमें से एक युद्ध एक स्थिर वेब प्रोजेक्ट है (ज़िपित एचटीएमएल + मीडिया फाइलों का नाम बदलकर * .war)। मैं बुनियादी http auth के साथ सामग्री की सुरक्षा के लिए इस युद्ध में एक वेब-आईएनएफ/web.xml फ़ाइल जोड़ना चाहता हूं।मैं tomcat-users.xml को बदले बिना स्थिर टोमकैट वेबपैप्स के लिए मूल http प्रमाणीकरण कैसे प्रदान करूं?

मुझे पता है कि वैश्विक उपयोगकर्ताओं को जोड़कर और tomcat-users.xml में भूमिका निभाने के द्वारा यह कैसे करना है, लेकिन मैं अपने युद्ध-फ़ाइल में सभी उपयोगकर्ता नाम और पासवर्ड परिभाषित करना चाहता हूं।

  1. क्या यह टॉमकैट के tomcat-users.xml को छूए बिना किया जा सकता है?
  2. और यदि हां, तो मैं इसे अपने स्थिर प्रोजेक्ट के web.xml में कैसे निर्दिष्ट करूं?

Thx, जुव

उत्तर

8

मैं यहाँ एक समाधान पाया: http://wiki.metawerx.net/wiki/SecuringYourSiteWithContainerManagedSecurity

पेज बताता है कि कैसे अपनी खुद की WEB-INF/users.xml के लिए अपने खुद META-INF/context.xml इशारा परिभाषित करने के लिए। दुर्भाग्य से, user.xml फ़ाइल का लिंक पूर्ण होना चाहिए, और मैं अपनी कॉन्फ़िगरेशन फ़ाइलों में ओएस/फाइल सिस्टम पथों पर कोई धारणा नहीं बनाना चाहता हूं।

यहाँ मेरे वर्तमान WEB-INF/web.xml है:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<web-app 
    xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd" 
    version="2.5"> 

    <display-name>SuperCoolTool</display-name> 
    <description>What an awesome app!</description> 

    <security-role> 
     <role-name>manager</role-name> 
    </security-role> 
    <security-role> 
     <role-name>keyuser</role-name> 
    </security-role> 

    <security-constraint> 
     <web-resource-collection> 
      <web-resource-name> 
       Entire Application 
      </web-resource-name> 
      <url-pattern>/*</url-pattern> 
     </web-resource-collection> 
     <auth-constraint> 
      <role-name>keyuser</role-name> 
      <role-name>manager</role-name> 
     </auth-constraint> 
    </security-constraint> 

    <login-config> 
     <auth-method>BASIC</auth-method> 
     <realm-name>Evaluation Area</realm-name> 
    </login-config> 

</web-app> 

एक META-INF/context.xml मिलान इस प्रकार दिखाई देगा:

<?xml version="1.0" encoding="UTF-8"?> 
<Context> 
    <Realm className="org.apache.catalina.realm.MemoryRealm" 
      pathname="[PATH-TO-YOUR-WEBAPP]/WEB-INF/users.xml"/> 
</Context> 
1

आप निर्देशिका है जहाँ बिल्ला सभी तैनात किए जाने वाले एप्लिकेशन संबंधित पथ का उपयोग कर सकते डालता है पता है (क्योंकि वे catalina.base env.variable, यानी tomcat घर के संबंध में हल कर रहे हैं)।

उदाहरण के लिए, यदि आप ग्रहण आईडीई का उपयोग कर की तैनाती कर रहे हैं, आम तौर पर क्षुधा wtpwebapps में तैनात किया गया है, तो आप उपयोग कर सकते हैं:

<Realm className="org.apache.catalina.realm.MemoryRealm" 
pathname="wtpwebapps/YOUR_APP_NAME/WEB-INF/users.xml"/> 

अभी तक सही नहीं है, लेकिन कम से कम आप पूर्ण पथ का उपयोग नहीं कर रहे हैं।

एक विकल्प, आपके खुद के दायरे को लागू करना होगा जो MemoryRealm को बढ़ाता है और super.setPathname() को कॉल करने से पहले पथनाम को पूर्व-प्रक्रिया करता है;

आप डेटासोर्सरेल के लिए भी जा सकते हैं, जिसमें यह समस्या नहीं है और यह उत्पादन के लिए उपयुक्त है।

सर्वलेट कंटेनर स्वतंत्र दृष्टिकोण के लिए आप फ़िल्टर के आधार पर सुरक्षा ढांचे का उपयोग कर सकते हैं (उदा। वसंत सुरक्षा, ...)

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