`

使用Filter实现访问监控

阅读更多
实现Servlet的接口过滤器接口Filter实现对用户访问页面的监控


import java.io.IOException;
import java.util.Date;
import java.util.Map;

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 javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import com.csair.amp.web.webinf.common.model.LoginInfo;
import com.csair.amp.web.webinf.utils.ReadPropertiesUtils;
import com.csair.smms.effmonitor.dto.MonitorLog;
import com.csair.smms.effmonitor.service.MonitorService;

/**
 * 效能监控过滤器类
 * 
 * @author ahomeeye
 * 
 *         2012-7-15 下午9:20:49
 */
public class EffMonitorFilter implements Filter {

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {

		HttpServletRequest req = (HttpServletRequest) request;
		HttpServletResponse res = (HttpServletResponse) response;
		HttpSession session = req.getSession();

		String orginPath = req.getRequestURL().toString();
		int index = orginPath.indexOf("/", 8);
		String reqPath = orginPath.substring(index);

		LoginInfo u = (LoginInfo) session.getAttribute("user");
		if (u != null) {

	        // 获取monitorService实现bean,此处无法使用spring的自动封装功能,monitorService
			ApplicationContext ac = WebApplicationContextUtils
					.getWebApplicationContext(session.getServletContext());
			MonitorService monitorService = (MonitorService) ac
					.getBean("monitorService");

            //ReadPropertiesUtils请参考http://ahomeeye.iteye.com/admin/blogs/1533760
			Map<String, String> urlMap = ReadPropertiesUtils
					.getPropMap("effmonitor.properties");
			if (urlMap.containsKey(reqPath)) { // 在监控的url包含有
				MonitorLog m = new MonitorLog();
				m.setUsername(u.getUsername());
				m.setLogtime(new Date());
				m.setFunction(urlMap.get(reqPath));
				m.setClassName(reqPath);
				m.setMethodName(urlMap.get(reqPath));
				monitorService.insertMonitorLog(m);// 保存效能监控日志
			}
		}
		chain.doFilter(req, res);
	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {

	}

	@Override
	public void destroy() {

	}

}


JavaBean类:
package com.csair.smms.effmonitor.dto;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 * 监控日志实体
 * 
 * @author ahomeeye
 * 
 *         2012-7-11 下午7:22:49
 */
@Entity
@Table(name = "MONITOR_LOG")
public class MonitorLog implements Serializable {
	private static final long serialVersionUID = 7707875472196483005L;
	private int id;// 编号
	private String username;// 用户名
	private Date logtime;// 使用时间
	private String function;// 使用功能
	private String className;// 类名
	private String methodName;// 方法名

	public MonitorLog() {
		super();
	}

	public MonitorLog(int id, String username, Date logtime, String function,
			String className, String methodName) {
		super();
		this.id = id;
		this.username = username;
		this.logtime = logtime;
		this.function = function;
		this.className = className;
		this.methodName = methodName;
	}

	@Id
	@SequenceGenerator(name = "monitor", sequenceName = "seq_monitorlog", allocationSize = 1)
	@GeneratedValue(strategy = GenerationType.AUTO, generator = "monitor")
	@Column(name = "LOG_ID")
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	@Column(name = "USERNAME", length = 20)
	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	@Column(name = "LOG_TIME")
	@Temporal(TemporalType.TIMESTAMP)
	public Date getLogtime() {
		return logtime;
	}

	public void setLogtime(Date logtime) {
		this.logtime = logtime;
	}

	@Column(name = "FUNCTION", length = 20)
	public String getFunction() {
		return function;
	}

	public void setFunction(String function) {
		this.function = function;
	}

	@Column(name = "CLASS_NAME", length = 100)
	public String getClassName() {
		return className;
	}

	public void setClassName(String className) {
		this.className = className;
	}

	@Column(name = "METHOD_NAME", length = 30)
	public String getMethodName() {
		return methodName;
	}

	public void setMethodName(String methodName) {
		this.methodName = methodName;
	}

	@Override
	public String toString() {
		return "MonitorLog [id=" + id + ", username=" + username + ", logtime="
				+ logtime + ", function=" + function + ", className="
				+ className + ", methodName=" + methodName + "]";
	}

}


0
2
分享到:
评论

相关推荐

    Web后端开发-使用Filter过滤器技术,实现访问量统计-方法二使用web.xml配置的方式

    在我们的案例中,我们将使用Filter来统计每次请求的数量,从而实现访问量的统计。 要创建一个Filter,我们需要继承`javax.servlet.Filter`接口并实现其`doFilter()`方法。在这个方法里,我们可以添加统计代码,例如...

    开发windows驱动程序,实现监控文件读写操作.zip

    - 在Windows中,通过编写文件系统过滤驱动(File System Filter Driver)可以实现文件读写的监控。这类驱动可以插入到I/O请求管道(IRP)中,拦截并处理文件操作。 - 文件系统过滤驱动可以监听Create、Read、Write...

    servlet过滤器技术实例,

    在本实例中,我们将深入探讨Servlet过滤器(Filter)的使用和实现,以及它在实际应用中的重要性。 一、Servlet过滤器简介 Servlet过滤器遵循Java Servlet规范,通过实现`javax.servlet.Filter`接口来创建自定义过滤...

    文件读写监控工具文件读写监控工具文件读写监控工具

    在Windows操作系统中,可以利用Windows文件系统过滤驱动(File System Filter Driver)或者注册文件系统通知(ReadDirectoryChangesW)来监控文件活动。这些工具会监听系统中所有进程的文件操作请求,并记录相关信息...

    filter过滤器的简单使用.rar

    在标题提到的"filter过滤器的简单使用.rar"压缩包中,很显然包含了一个关于如何在Maven项目和Spring Boot项目中使用Filter的示例。下面将详细介绍Filter的基本概念、工作原理以及如何在两种项目环境中应用。 **...

    Filter在MyEclipse中的创建方法

    访问配置了Filter的URL,观察Filter是否按照预期工作。 视频演示和`说明.txt`文件将更直观地展示上述步骤,包括在MyEclipse中创建新Filter项目、编写Filter类、配置web.xml以及如何运行和测试Filter。观看视频或...

    Java Filter相关资料

    这个技术被广泛用于实现各种功能,比如权限控制、日志记录、数据过滤、GZIP压缩等。本资料包可能包含了关于Java Filter的详细使用方法和生命...通过深入学习和实践,你将能够利用Filter实现各种高效且灵活的解决方案。

    Filter简介和工作原理

    如果Filter选择不继续处理,可以直接修改响应并返回给客户端,或者使用`RequestDispatcher`或`HttpServletResponse`的方法进行转发或重定向。 **Filter的应用场景** - **安全控制**:例如进行用户登录检查,只有...

    C# FileWatcher文件监控系统源代码

    如`Path`(要监视的目录路径)、`Filter`(要监视的特定文件类型)和`NotifyFilters`(要监听的事件类型,如创建、删除、重命名、大小更改等),我们可以创建一个基本的文件监控系统。当这些事件发生时,`...

    c#系统监控软件,可以监控全盘文件及其子文件夹(最低分分享)

    10. 安全性:监控系统可能涉及到敏感数据,因此必须遵循安全最佳实践,限制访问权限,防止恶意攻击,并遵守数据隐私法规。 综上所述,构建一个C#系统监控软件是一项涉及事件处理、文件系统交互、性能优化、错误处理...

    Java-filter测试程序

    例如,我们可以通过Filter实现权限控制、日志记录、数据转换、GZIP压缩等多种功能。以下是对Filter生命周期和核心方法的详细解释: 1. **生命周期**:Filter的生命周期由容器(如Tomcat)管理,包括初始化、过滤和...

    druid示例(spring监控,数据库监控,web监控)

    再者,Druid的Web监控还包含了过滤器(Filter)功能,例如DruidStatFilter可以监控每个Servlet请求的耗时,帮助开发者找出性能瓶颈。此外,Druid还支持SQL解析和日志打印,可以记录所有的SQL语句及其执行时间,这...

    Filter1源代码

    Filter在Java Web中的主要作用包括:数据校验、安全控制、字符编码转换、性能监控等。它的工作基于Servlet规范中的Filter链,每个Filter可以按需设置拦截规则,并将请求传递给下一个Filter或直接转发到目标Servlet。...

    java自学===Filter类的应用,网站数量统计

    在本篇博客“java自学===Filter类的应用,网站数量统计”中,作者可能探讨了如何使用Filter来实现网站访问量的统计功能。 首先,Filter类位于javax.servlet包中,它是Servlet API的一部分,主要用于增强Web应用程序...

    Winows文件夹监控脚本

    通过设置属性如`Path`(监控的文件夹路径)、`Filter`(过滤特定类型的文件)和`NotifyFilters`(监控的事件类型),可以实现自定义的文件夹监控。例如,你可以编写C#或VB.NET代码,将结果写入日志文件或触发其他...

    JSP-Filter的简单练习

    **JSP(JavaServer Pages)**是一种...通过合理配置和使用Filter,我们可以实现更灵活、更高效的Web应用程序。在学习和实践过程中,结合源码分析和开发工具,能更深入地理解其工作机制,从而更好地应用于实际项目中。

    seaweedfs文档mastercolume filter

    例如,你可以配置一个Filter来缓存最近访问的文件,从而提高读取性能。Filter的实现是插件化的,允许用户根据自己的业务需求编写自定义Filter。 在使用SeaweedFS时,了解并正确配置Master、Colume和Filter的参数至...

    c#系统监控软件,可以监控全盘文件及其子文件夹

    9. 安全性:在监控文件系统时,应遵守操作系统权限规则,避免访问敏感文件或超出程序应有的权限范围。 综上所述,开发一个C#系统监控软件,可以监控全盘文件及其子文件夹,不仅需要掌握C#编程基础,还需要理解.NET...

    ISAPI Filter 限制 IIS 多线程访问 .rar

    在"ISAPI Filter 限制 IIS 多线程访问"这个主题中,主要关注的是ISAPI过滤器如何可能影响IIS的并发处理能力。IIS作为一款高性能的Web服务器,其多线程模型允许同时处理多个客户端请求,以提高服务效率。但当ISAPI...

Global site tag (gtag.js) - Google Analytics