WhiteList.java
package com.toowards.sbr;
import com.google.common.base.Charsets;
import com.google.common.io.Files;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.List;
/**
* White list class
* User: Jason@toowards
* Date: 06/09/2013
*/
public class WhiteList {
private static String WHITE_LIST_FILENAME;
private List<String> whiteList; // white list data
private static WhiteList instance;
private static Object lock = new Object();
public static WhiteList getInstance() {
try
{
// finds resource relative to the class location
URL url = new WhiteList().getClass().getResource("whitelist.txt");
WHITE_LIST_FILENAME= url.getPath();
}catch(Exception ioe)
{
ioe.printStackTrace();
}
if (instance == null) {
synchronized (lock) {
if (instance == null) {
instance = new WhiteList();
File file = new File(WHITE_LIST_FILENAME);
try {
instance.whiteList = Files.readLines(file, Charsets.UTF_8);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
return instance;
}
public List<String> getWhiteList() {
return whiteList;
}
}
WhiteListFilter
package com.toowards.sbr;
import com.google.common.io.Files;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.List;
/**
* White list class
* User: Jason@toowards
* Date: 09/09/2013
*/
public class WhiteListFilter implements Filter {
private static String IP = "ip";
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
/**
* whitelist filter
*
* @param servletRequest
* @param servletResponse
* @param filterChain
* @throws IOException
* @throws ServletException
*/
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) servletRequest;
HttpServletResponse resp = (HttpServletResponse) servletResponse;
String ip = req.getRemoteAddr();
WhiteList whiteList = WhiteList.getInstance();
if (!whiteList.getWhiteList().contains(ip)) { // Surely we can do preg match to validate ip based on pattern here
resp.setCharacterEncoding("UTF-8");
resp.getWriter().println("IP restricted");
} else {
resp.setCharacterEncoding("UTF-8");
filterChain.doFilter(req, resp);
}
}
@Override
public void destroy() {
}
}
192.168.1.45
192.168.1.47
web.xml
<!-- WhiteList filter config -->
<filter>
<filter-name>WhiteListFilter</filter-name>
<filter-class>com.toowards.sbr.WhiteListFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>WhiteListFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Put this before any servlet to restrict ip first -->