2011-10-03 25 views
8

基本認証用にtomcatを設定しました。 誰かが私のWebアプリケーションにアクセスすることを望んでいませんが、このアプリケーションはWebサービスを提供しています。 だから私は基本認証から特定のIPアドレスをバイパスしたい(そのIPが認証を必要はありません。)Tomcat:指定したIPアドレスのバイパス基本認証

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

ありがとう、 Chetan。

答えて

9

ほんの少しのIPアドレスを許可し、他の誰も許可しない場合は、Remote Address Filter Valveが必要です。

不明なIPアドレスのクライアントに基本ログインダイアログが表示され、ログインできる場合は、カスタムValveが必要です。 RemoteAddrValveのソース(およびそれが親クラスRequestFilterValveの良い出発点である。見my former answer tooてください。

とにかく、以下のコンセプトコードの証明である。クライアントから来ている場合、それはRequestに満たされたPrincipalを置きます信頼できるIPログインモジュールは、パスワードの入力を要求しませんので、それ以外の場合はRequestオブジェクトに触れていないと、ユーザーは通常どおりログインできますserver.xmlため

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

} 

そして、設定例を:。。

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

palacsinitありがとうございます、私はこれを追加しようとし、すぐに結果を投稿します。 – Chetan

+1

それは完全に働いた、非常にpalacsintありがとう。 – Chetan