2011-10-03 17 views
8

के लिए मूल प्रमाणीकरण बाईपास मैंने बुनियादी प्रमाणीकरण के लिए टोमकैट कॉन्फ़िगर किया है। मैं नहीं चाहता कि किसी को भी मेरे वेब एप्लिकेशन तक पहुंच हो, लेकिन ऐप वेब सेवाओं की सेवा कर रहा है। तो मैं बुनियादी प्रमाणीकरण से एक विशिष्ट आईपी पते बायपास करना चाहते हैं (है कि आईपी प्रमाणीकरण की आवश्यकता नहीं होनी चाहिए।)टोमकैट: निर्दिष्ट आईपी पते

बिल्ला-users.xml:।

<tomcat-users> 
<user username="user" password="password" roles="user"/> 
</tomcat-users> 

web.xml:

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


<login-config> 
    <auth-method>BASIC</auth-method> 
    <realm-name>You must enter your login credentials to continue</realm-name> 
</login-config> 

<security-role> 
    <description> 
     The role that is required to log in to the Application 
    </description> 
    <role-name>user</role-name> 
</security-role> 

धन्यवाद, चेतन।

उत्तर

9

यदि आप केवल कुछ ही आईपी पते की अनुमति देना चाहते हैं और सभी को अस्वीकार करना चाहते हैं तो Remote Address Filter Valve आपको चाहिए।

यदि आप चाहते हैं कि अज्ञात आईपी पते से क्लाइंट मूल लॉगिन संवाद देखें और लॉगिन कर सकते हैं तो आपको कस्टम Valve की आवश्यकता हो सकती है। RemoteAddrValve (और यह है माता पिता वर्ग RequestFilterValve के स्रोत, वैसे भी एक अच्छा प्रारंभिक बिंदु है। एक नज़र my former answer too लो।

नीचे अवधारणा कोड का एक सबूत है। यह Request करने के लिए एक भरा Principal डालता है अगर ग्राहक से आ रही है इसलिए लॉगिन मॉड्यूल एक विश्वसनीय आईपी server.xml के लिए पासवर्ड पूछेंगे नहीं अन्यथा यह स्पर्श नहीं करता है Request वस्तु और उपयोगकर्ता सामान्य रूप से प्रवेश कर सकते हैं

import java.io.IOException; 
import java.security.Principal; 
import java.util.ArrayList; 
import java.util.List; 

import javax.servlet.ServletException; 

import org.apache.catalina.connector.Request; 
import org.apache.catalina.connector.Response; 
import org.apache.catalina.realm.GenericPrincipal; 
import org.apache.catalina.valves.ValveBase; 

public class AutoLoginValve extends ValveBase { 

    private String trustedIpAddress; 

    public AutoLoginValve() { 
    } 

    @Override 
    public void invoke(final Request request, final Response response) 
      throws IOException, ServletException { 
     final String remoteAddr = request.getRemoteAddr(); 
     final boolean isTrustedIp = remoteAddr.equals(trustedIpAddress); 
     System.out.println("remoteAddr: " + remoteAddr + ", trusted ip: " 
       + trustedIpAddress + ", isTrustedIp: " + isTrustedIp); 
     if (isTrustedIp) { 
      final String username = "myTrusedUser"; 
      final String credentials = "credentials"; 
      final List<String> roles = new ArrayList<String>(); 
      roles.add("user"); 
      roles.add("admin"); 

      final Principal principal = new GenericPrincipal(username, 
       credentials, roles); 
      request.setUserPrincipal(principal); 
     } 

     getNext().invoke(request, response); 
    } 

    public void setTrustedIpAddress(final String trustedIpAddress) { 
     System.out.println("setTrusedIpAddress " + trustedIpAddress); 
     this.trustedIpAddress = trustedIpAddress; 
    } 

} 

और एक config उदाहरण:।।

<Valve className="autologinvalve.AutoLoginValve" 
    trustedIpAddress="127.0.0.1" /> 
+0

धन्यवाद palacsinit, मैं इसे जोड़ने की कोशिश करूंगा और जल्द ही परिणाम पोस्ट करूंगा। – Chetan

+1

यह पूरी तरह से काम किया, बहुत बहुत धन्यवाद palacsint। – Chetan

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