`

使用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
分享到:
评论

相关推荐

    spring+springmvc+mybatis项目案例实现用户角色权限管理

    使用spring+springmvc框架 ...使用了urlrewrite filter进行地址重写,实现伪静态页面 使用了sitemesh对网页进行布局和修饰 使用了loginFilter对访问进行登录过滤 使用了CheckCodeServlet生成验证码图片

    阿里巴巴的开源项目JDBC连接池、监控组件 Druid.zip

    Druid是阿里巴巴的一款java开源的为监控而生的数据库连接池组件。Druid是一个JDBC组件,它包括三部分:... 如下是一个基于Druid内置扩展StatFilter的监控实现:Druid 的 JavaDoc 文档请看 标签:阿里巴巴

    基于Javaweb的流量监控demo源码+项目说明.zip

    - 几个摆烂class文件(基于Inceptor和filter),监控别人的流量,于此同时把流量都转发到自己机器的服务端(flask服务),且流量不进入控制器,实现不被攻击但是宕机 摆烂的jar 部署方式就是直接运行 ``` java -jar...

    Sosoo 1.0网络爬虫程序.doc

    通过实现RobotCallback接口来实现,当然你也可以直接取roboter对象的属性来监控。 系统提供RobotMonitor实现,用户打印在cosole上运行期的状态。 RobotCallback m Monitor(); robby.setWebRobotCallback(monitor)...

    Tomcat监控工具Probe,支持tomcat6-7-8-9.zip

    Context: view filter mappings X X X X Context: list attributes X X X X Context: remove attributes X X X Context: start X X X Context: stop X X X Context: view web.xml X X X Context: view ...

    Jetty中文手册

    欢迎访问Jetty文档 Wiki. Jetty是一个开源项目,提供了http服务器、http客户端和java servlet容器。 这个wiki提供jetty的入门教程、基础配置、功能特性、优化、安全、JavaEE、监控、常见问题、故障排除帮助等等。它...

    最新版Radmin3.4完美破解版-隐藏任务栏图标

     IP Filter 仅允许从特定 IP 地址和网络访问 Radmin Server。  添加到日志文件的 DNS 名称和用户名信息。  智能防护密码猜测。  安全性已经构建到了 Radmin 的核心:  Radmin 服务器有两个安全子系统。 因此...

    破解版为最新完美版。支持WIN7隐藏任务栏图标

     IP Filter 仅允许从特定 IP 地址和网络访问 Radmin Server。  添加到日志文件的 DNS 名称和用户名信息。  智能防护密码猜测。  安全性已经构建到了 Radmin 的核心:  Radmin 服务器有两个安全子系统。 因此...

    flex3的cookbook书籍完整版dpf(包含目录)

    12.9节使用Convolution Filter创建渐变效果 第十三章. 集合(439) 13.1节. 为ArrayCollection添加,排序和获取数据 13.2节. 过滤ArrayCollection 13.3节. 确定ArrayCollection数据项是否被修改 13.4节. 创建...

    Hadoop硬实战 [(美)霍姆斯著][电子工业出版社][2015.01]_PDF电子书下载 带书签目录 高清完整版.rar )

    13.2.1 访问任务日志 技术点81 检查任务日志 13.2.2 调试不可预期的输入 技术点82 定位input split 问题 13.2.3 调试JVM 配置 技术点83 解决任务的JVM 启动参数 13.2.4 高效调试的编码准则 技术点84...

    SpringCloudLearning_forezp.tar.gz

    如何使用MongoDB+Springboot实现分布式ID? 如何在springcloud分布式系统中实现分布式锁? 如何用Redlock实现分布式锁 如何在IDEA启动多个Spring Boot工程实例 JWT如何在Spring Cloud微服务系统中在服务相互调时传

    springboot参考指南

    使用远程shell来进行监控和管理 i. 43.1. 连接远程shell i. 43.1.1. 远程shell证书 ii. 43.2. 扩展远程shell i. 43.2.1. 远程shell命令 ii. 43.2.2. 远程shell插件 v. 44. 度量指标(Metrics) i. 44.1. 系统指标 ...

    Hadoop实战(第2版)

    数据科学.7 数据结构和算法的运用7.1 使用图进行数据建模和解决问题7.1.1 模拟图7.1.2 最短路径算法技术点52 找出两个用户间的最短距离7.1.3 friends-of-friends(FoF) 技术点53 计算FoF 7.1.4 ...

    Android高级编程--源代码

    5.1.2 使用Intent Filter来为隐式Intent提供服务 121 5.1.3 使用Intent Filter作为插件和扩展 129 5.1.4 使用Intent来广播事件 132 5.2 Adapter简介 135 5.2.1 Android提供的部分Adapter简介 135 5.2.2 使用...

    《MyEclipse 6 Java 开发中文教程》前10章

    10.5.2.6 使用 HibernateTemplate 实现分页查询 254 10.6 小结 255 10.7 参考资料 255 10.7.1 MyEclipse生成的Spring+Hibernate无法保存数据问题的解决方法 255 10.7.2 MyEclipse生成的Spring+Hibernate无法保存数据...

    springCloud

    一 服务启动 此项目集成了:Feign,Spring Cloud Bus,hystrix,swagger-ui,zuul-filter,配置中心功能 1)安装rabbitMQ 2)启动cloud—eureka :此时可访问 localhost:8761 3)启动 cloud-config 此处为配置中心 ...

    switch security.rar

    4、使用SSH实现安全的登录 端口安全> ·SW端口安全是2层特性,提供3种保护: 1. 可以限定一个接口所能学习的MAC地址数量 2. 可以在一个接口静态绑定MAC地址 1.基于主机MAC来允许流量  ·可定义2个参数:授权...

    测试培训教材

    项目管理员可以使用QC的Excel插件工具来执行需求的批量导入,进行导入之前请先确认已经访问过MQC主页,并安装了QCMSExcelAddin.exe插件。 插件下载地址: http://updates.merc-int.com/qual ... /msexcel/index.html...

    华为编程开发规范与案例

    1 逻辑类问题(A类)-指设计、编码中出现的计算正确性和一致性、程序逻辑控制等方面出现的问题,在系统中起关键作用,将导致软件死机、功能正常实现等严重问题; 接口类问题(B类)-指设计、编码中出现的函数和...

Global site tag (gtag.js) - Google Analytics