java过滤器

来源:互联网 发布:淘宝可以解绑支付宝 编辑:程序博客网 时间:2024/06/16 15:07
package com.li.filter;


import java.io.IOException;


import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.context.support.WebApplicationContextUtils;
import org.springframework.web.context.support.XmlWebApplicationContext;


import com.ninanlin.zixun.biz.SysLogBiz;
import com.ninanlin.zixun.entity.SysLog;
import com.ninanlin.zixun.entity.User;
import com.ninanlin.zixun.utils.GetTime;
import com.ninanlin.zixun.utils.IpAddress;


/**
 * 用户访问路径记录拦截器 需实现:1)记录请求路径的services方法 2)在session中,记录登录user的用户信息
 * 
 * 
 */
public class UserVisitURILogFilter implements Filter {


private SysLogBiz sysLogI;


public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain fc) throws IOException, ServletException {
int userid = 0;
// 转换请求
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse Response = (HttpServletResponse) resp;
HttpSession session = request.getSession();


if (request.getSession().getAttribute(User.SESSION_USER_KEY) != null) {
// 获取请求用户
userid = (int) request.getSession().getAttribute(
User.SESSION_USER_KEY);
}
// 获取请求地址
String req_URI = request.getRequestURI();
if (req_URI.contains("/zixun/front")) {
// 获取访问时间 精确到秒
String visitTime = GetTime.getNowTime();
// 获取用户ip
String user_ip = IpAddress.getRemoteAddr(request);
// 获取来源页面(通过refer)
String req_method = request.getMethod();
String req_refer = request.getHeader("Referer");
String UserAgent = request.getHeader("User-Agent");
String Accept = request.getHeader("Accept");
String AcceptLanguage = request.getHeader("Accept-Language");
SysLog log = new SysLog();
log.setReq_method(req_method);
log.setAccept(Accept);
log.setUser_ip(user_ip);
log.setReq_refer(req_refer);
log.setVisitTime(visitTime);
log.setAcceptLanguage(AcceptLanguage);
log.setUserAgent(UserAgent);
log.setReq_URI(req_URI);
if (userid != 0) {
log.setUserId(userid);
}


saveUserReq(log);
}
// 跳出当前过滤器
fc.doFilter(req, resp);


}


public void saveUserReq(SysLog sysLog) {
// TODO:如果user为空,记录用户未登录即可
// TODO:实现保存进数据库即可
sysLogI.SaveSysLog(sysLog);
}


public void init(FilterConfig config) throws ServletException {
ServletContext sc = config.getServletContext();
XmlWebApplicationContext cxt = (XmlWebApplicationContext) WebApplicationContextUtils
.getWebApplicationContext(sc);


if (cxt != null && cxt.getBean("sysLogI") != null && sysLogI == null)
sysLogI = (SysLogBiz) cxt.getBean("sysLogI");
}


public void destroy() {


}
}