2015-04-01 150 views
0

我想啓用Facebook抓取我的網站,但它需要用戶身份驗證。 Facebook說,解決這個問題的一種方法是將他們的ips列入白名單。我使用的是Apache Shiro,我知道你可以通過從BasicHttpAuthenticationFilter調用getHost來獲得客戶端的IP地址,但是我不知道如何讓某些IP地址通過認證。Shiro的白名單用戶IP

回答

1

你可能必須建立Shrio的

org.apache.shiro.web.filter.authc.AuthenticatingFilter 

微創的自定義實現,你將不得不通過擴展,並添加邏輯跳過BasicHttpAuthenticationFilter如果請求是從白名單中的IP地址來定製BasicHttpAuthenticationFilter 。

package com.acme.web.filter.authc; 

import java.io.IOException; 
import java.util.Collections; 
import java.util.HashSet; 
import java.util.Set; 

import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.ServletResponse; 

public class WhitelistedBasicHttpAuthenticationFilter extends BasicHttpAuthenticationFilter { 

    private Set<String> whitelist = Collections.emptySet(); 

    public void setWhitelist(String list) { 
     whitelist = new HashSet<String>(); 
     Collections.addAll(whitelist, list.split(",")); //make sure there are no spaces in the string!!!! 
    } 
    @Override 
    protected boolean isEnabled (ServletRequest request, ServletResponse response) throws ServletException, IOException 
    { 
     if (whitelist.contains(request.getRemoteAddr())) { 
      return false; 
     } 
     return super.isEnabled(request, response); 
    } 
} 

你在 'shiro.ini'

authc=com.acme.web.filter.authc.WhitelistedBasicHttpAuthenticationFilter 
authc.whitelist=192.168.1.1,192.168.1.2,192.168.2.3