AddressFilter.java
package com.ziesemer.utils.web.addressFilter;
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.ziesemer.utils.web.addressFilter.actions.IAction;
/**
* @author Mark A. Ziesemer
* <a href="http://www.ziesemer.com."><www.ziesemer.com></a>
*/
public class AddressFilter implements Filter{
protected static final Logger LOGGER = LoggerFactory.getLogger(AddressFilter.class);
// Cache for performance
protected String filterName;
protected final List<AddressGroup> groups = new LinkedList<AddressGroup>();
protected final List<IAction> defaultActions = new LinkedList<IAction>();
public void init(final FilterConfig config) throws ServletException{
filterName = config.getFilterName();
}
public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain)
throws IOException, ServletException{
LOGGER.debug("({}) Request from: {}", filterName, request.getRemoteAddr());
final FilterState fs = new FilterState(filterName);
try{
for(final AddressGroup group : groups){
group.run(request, response, fs);
if(!fs.getContinueFilter()){
break;
}
}
if(fs.getContinueFilter()){
for(final IAction action : defaultActions){
action.run(request, response, fs, "(DefaultActions)");
}
}
}catch(final Exception ex){
fs.setDoChain(false);
LOGGER.error("({}) Error running filter: {}",
filterName, ex, ex);
}
if(fs.getDoChain()){
chain.doFilter(request, response);
}
}
public void destroy(){
// Nothing to do.
}
}