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