参考:http://elim.iteye.com/blog/1750680
1、spring中配置
<!-- springmvc配置拦截器 -->
<!-- mvc:mapping path 需拦截的目录 -->
<!-- mvc:exclude-mapping path 需排除拦截的目录 -->
<mvc:interceptors>
<!-- 使用bean定义一个Interceptor,直接定义在mvc:interceptors根下面的Interceptor将拦截所有的请求 -->
<bean class="com.host.app.web.interceptor.AllInterceptor"/>
<mvc:interceptor>
<mvc:mapping path="/test/number.do"/>
<!-- 定义在mvc:interceptor下面的表示是对特定的请求才进行拦截的 -->
<bean class="com.host.app.web.interceptor.LoginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
记得添加scheme
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
public class IpInterceptor extends HandlerInterceptorAdapter {
private static final String[] allowHosts = { "127.0.0.1" };
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
if ("post".equalsIgnoreCase(request.getMethod())) {
String ip =getIpAddr(request);
/*for (String allowHost : allowHosts) {
if (ip.contains(allowHost)) {
return true;
}
}
throw new Exception("请求来源不正确");*/
return true;
}
return super.preHandle(request, response, handler);
}
/**
* 获取ip
* @param request
* @return
* @throws Exception
*/
public static String getIpAddr(HttpServletRequest request) throws Exception {
String ip = request.getHeader("X-Real-IP");
if (ip != null && !"unknown".equalsIgnoreCase(ip)) {
return ip;
}
ip = request.getHeader("X-Forwarded-For");
if (ip != null && !"unknown".equalsIgnoreCase(ip)) {
// 多次反向代理后会有多个IP值,第一个为真实IP。
int index = ip.indexOf(',');
if (index != -1) {
return ip.substring(0, index);
} else {
return ip;
}
} else {
return request.getRemoteAddr();
}
}
}