Spring3 MVC 拦截器

Spring3 MVC 拦截器


我这里定义一个全局的拦截器:

<!-- 拦截器 -->  
    <mvc:interceptors>  
        <mvc:interceptor>  
            <mvc:mapping path="/*.do" />  
            <bean class="com.log.report.interceptor.AccessStatisticsIntceptor" />  
        </mvc:interceptor>  
    </mvc:interceptors>

定义在servlet-config.xml文件中。

以下是一个拦截器,它用来记录访问的ip和流量。
拦截器需要实现HandlerInterceptor接口,同时实现相应的方法。在PreHandler方法中,返回值如果是false,就会拦截住请求。

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class AccessStatisticsIntceptor implements HandlerInterceptor {
	
	public static long access_num = 0;
	public static Map<String,Long> IPMap = new HashMap<String,Long>();
	public static Map<String,Long> urlMap = new HashMap<String,Long>();
	
	@Override
	public void afterCompletion(HttpServletRequest arg0,
			HttpServletResponse arg1, Object arg2, Exception arg3)
			throws Exception {
		// TODO Auto-generated method stub

	}

	@Override
	public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,
			Object arg2, ModelAndView arg3) throws Exception {
		// TODO Auto-generated method stub

	}

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
			Object obj) throws Exception {
			
			access_num += 1;
			
			SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
			Date now = new Date();
			
			String ip = request.getHeader("x-forwarded-for");    
		    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {    
		        ip = request.getHeader("Proxy-Client-IP");    
		    }    
		    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {    
		        ip = request.getHeader("WL-Proxy-Client-IP");    
		    }    
		    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {    
		        ip = request.getRemoteAddr();    
		    }   
		    
		    String url = request.getRequestURI() != null ? request.getRequestURI().toString() : null;
		    url= sdf.format(now) + "-" + url;
		    if(url != null && urlMap.containsKey(url)) {
		    	urlMap.put(url, urlMap.get(url) + 1 );
		    } else if(url != null) {
		    	urlMap.put(url, 1l);
		    }
		    
		    String key = sdf.format(now) + "-" + ip;
		    
		    if(IPMap.containsKey(key)) {
		    	IPMap.put(key, IPMap.get(key) + 1 );
		    } else {
		    	IPMap.put(key, 1l);
		    }
		return true;
	}

}


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值