读取auth.properties中的ip信息,并判断是否和登录IP一致,不一致返回FORBIDDEN
web.xml:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <filter-mapping> <filter-name>authFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter> <filter-name>authFilter</filter-name> <filter-class> com.vtradex.server.webservice.web.filter.AuthFilter </filter-class> </filter> </web-app>
AuthFilter.java
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Date;
import java.util.Properties;
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 javax.servlet.http.HttpServletRequest;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import com.vtradex.server.model.interfaceLog.InterfaceVisitLog;
import com.vtradex.swms.server.service.common.CommonInterfaceManager;
import com.vtradex.thorn.server.model.EntityFactory;
/**
* Filename : AuthFilter.java
*
* @description:
*/
public class AuthFilter implements Filter {
protected static ApplicationContext ac;
protected static CommonInterfaceManager commonInterfaceManager;
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException {
String ip = this.getIp((HttpServletRequest)request);
Boolean checkIp = checkIp(ip);
if(!checkIp) {
PrintWriter pw = response.getWriter();
pw.write("FORBIDDEN!");
InterfaceVisitLog visitLog = EntityFactory.getEntity(InterfaceVisitLog.class);
visitLog.setIp(ip);
visitLog.setContext(request.getContentType());
visitLog.setVisitTime(new Date());
visitLog.setStatus("FORBIDDEN");
commonInterfaceManager.storeVisitLog(visitLog);
} else {
filterChain.doFilter(request, response);
}
}
public void init(FilterConfig fc) throws ServletException {
ac = WebApplicationContextUtils.getRequiredWebApplicationContext(fc.getServletContext());
AuthFilter.commonInterfaceManager = (CommonInterfaceManager) ac.getBean("commonInterfaceManager");
}
public void destroy() {
}
private String getIp(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if(ip == null || ip.length() == 0 || ip.equalsIgnoreCase("unknown")) ip = request.getHeader("Proxy-Client-IP");
System.out.println(ip);
if(ip == null || ip.length() == 0 || ip.equalsIgnoreCase("unknown")) ip = request.getHeader("WL-Proxy-Client-IP");
System.out.println(ip);
if(ip == null || ip.length() == 0 || ip.equalsIgnoreCase("unknown")) ip = request.getRemoteAddr();
System.out.println(ip);
return ip;
}
private Boolean checkIp(String ip) {
System.out.println("---------------------------------------------------------ip: "+ip);
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("auth.properties");
Properties p = new Properties();
try {
p.load(inputStream);
String ips = p.getProperty("ip");
String[] ipstrs = ips.split(",");
for(String s : ipstrs) {
if(ip.equals(s)) {
return Boolean.TRUE;
}
}
} catch (IOException e) {
e.printStackTrace();
return Boolean.FALSE;
}
return Boolean.FALSE;
}
}
auth.properties
ip=127.0.0.1,0:0:0:0:0:0:0:1,221.226.28.34,221.178.251.172