Filter过滤保存用户的操作日志
在web中会有用到所有用户浏览记录的一个Log记录并输出成报表的形式或者以table的形式展示在后台管理员页面。方便企业更好的运营产品
以下是Filter:
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 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");
//获取请求地址
String req_URI= request.getRequestURI();
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);
}
if(req_URI.contains("/zixun/front")){
saveUserReq(log);
}
//跳出当前过滤器
fc.doFilter(req, resp);
}
public void saveUserReq(SysLog sysLog){
//TODO:如果user为空,记录用户未登录即可
//TODO:实现保存进数据库即可
sysLogI.SaveSysLog(sysLog);
}
//在filter中无法使用自动注入,自动注入Service会报空指针异常。所以在这里需要手动配置bean,手动获取
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(){
}
}
在web.xml中配置如下:
<filter>
<filter-name>UserVisitURILogFilter</filter-name>
<filter-class>com.li.filter.UserVisitURILogFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>UserVisitURILogFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
实体类
package com.ninanlin.zixun.entity;
public class SysLog {
private int id;
private int userId;
private String req_URI;
private String visitTime;
private String user_ip;
private String req_refer;
private String UserAgent;
private String Accept;
private String AcceptLanguage;
private String req_method;
public String getReq_method() {
return req_method;
}
public void setReq_method(String req_method) {
this.req_method = req_method;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public String getReq_URI() {
return req_URI;
}
public void setReq_URI(String req_URI) {
this.req_URI = req_URI;
}
public String getVisitTime() {
return visitTime;
}
public void setVisitTime(String visitTime) {
this.visitTime = visitTime;
}
public String getUser_ip() {
return user_ip;
}
public void setUser_ip(String user_ip) {
this.user_ip = user_ip;
}
public String getReq_refer() {
return req_refer;
}
public void setReq_refer(String req_refer) {
this.req_refer = req_refer;
}
public String getUserAgent() {
return UserAgent;
}
public void setUserAgent(String userAgent) {
UserAgent = userAgent;
}
public String getAccept() {
return Accept;
}
public void setAccept(String accept) {
Accept = accept;
}
public String getAcceptLanguage() {
return AcceptLanguage;
}
public void setAcceptLanguage(String acceptLanguage) {
AcceptLanguage = acceptLanguage;
}
@Override
public String toString() {
return "SysLog [id=" + id + ", userId=" + userId + ", req_URI="
+ req_URI + ", visitTime=" + visitTime + ", user_ip=" + user_ip
+ ", req_refer=" + req_refer + ", UserAgent=" + UserAgent
+ ", Accept=" + Accept + ", AcceptLanguage=" + AcceptLanguage
+ "]";
}
}
以上便是所有的过滤器代码,仅供参考,有什么不妥的地方请您提出宝贵的意见,谢谢

浙公网安备 33010602011771号