springboot-aop访问拦截
来源:互联网 发布:php exec w3c 编辑:程序博客网 时间:2024/05/16 12:59
在web项目监控中,我们往往需要知道用户访问了什么url路径,对其进行访问数据收集,持久化到日志文件中或者db中。
采用aop拦截http请求数据,能做到很好收集用户访问数据。
导入依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency>
核心代码:
package com.sb.hyh.aop;import java.util.Map;import javax.servlet.http.HttpServletRequest;import org.apache.commons.lang3.StringUtils;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.springframework.stereotype.Component;import org.springframework.web.context.request.RequestContextHolder;import org.springframework.web.context.request.ServletRequestAttributes;@Aspect@Componentpublic class ServiceMonitor {@Before("execution(* com.sb.hyh..*Controller.*(..))")public void logAccess(JoinPoint joinPoint) {System.out.println("Completed: " + joinPoint);HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();String remoteAddr = getIpAddress(request);String userAgent = request.getHeader("user-agent");String requestUri = request.getRequestURI();String method = request.getMethod();Map<String, String[]> paramMap = request.getParameterMap();StringBuffer params = new StringBuffer();if (paramMap != null && !paramMap.isEmpty()) {for (Map.Entry<String, String[]> param : paramMap.entrySet()) {if ("".equals(params.toString())) {params.append(param.getKey() + "=");} else {params.append("&" + param.getKey() + "=");}String paramValue = "";if (param.getValue() != null && param.getValue().length > 0) {paramValue = param.getValue()[0];}// 屏蔽密码获取if (!"password".equals(param.getKey())) {params.append(paramValue);}}}System.out.println("ip address:" + remoteAddr);System.out.println("useragent:" + userAgent);System.out.println("url:" + requestUri);System.out.println("request method:" + method);System.out.println("method params:" + params.toString());System.out.println("---------------------------------");}public static String getIpAddress(HttpServletRequest request) {String ip = request.getHeader("X-Forwarded-For");if (StringUtils.isNotEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)) {// 多次反向代理后会有多个ip值,第一个ip才是真实ipint index = ip.indexOf(",");if (index != -1) {return ip.substring(0, index);} else {return ip;}}ip = request.getHeader("X-Real-IP");if (StringUtils.isNotEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)) {return ip;}return request.getRemoteAddr();}}
测试url
http://localhost:8080/test?password=123
http://localhost:8080/?key=key1&value=value2
控制台输出,可以看到来源ip,useraent,访问url,访问参数
项目地址:https://github.com/hong0220/sb/tree/master/SB-Aop
qq群:Java技术交流群 116738274
0 0
- springboot-aop访问拦截
- SpringBoot AOP 拦截器 Aspect
- springboot--页面访问拦截器
- 使用拦截器(intercept)和AOP写操作日志-springboot
- SpringBoot中利用AOP实现拦截器效果
- springboot-AOP
- SpringBoot-AOP
- springBoot aop
- SpringBoot之拦截器对数据库的访问
- springboot 拦截器配置
- SpringBoot--实现拦截器
- springboot添加拦截器
- springboot使用拦截器
- springboot添加拦截器
- springboot url拦截定制
- SpringBoot拦截器
- SpringBoot 自定义拦截器
- SpringBoot-拦截器
- 运动目标跟踪(一)--搜索算法预测模型之KF,EKF,UKF
- 生成全排列示例
- Android UI之switch的thumb与track属性定制自己的switch
- FtpGetFile函数下载不到最新文件Solution
- 运动目标跟踪(二)--搜索算法预测模型之粒子滤波
- springboot-aop访问拦截
- 类——类的复用(组合、继承、代理)
- Android 观察者与被观察者
- 错误处理页例子
- iOS 进度框(一) MBProgressHUD
- 运动目标跟踪(三)--搜索算法优化搜索方向之Meanshift
- 详细探究Spark的shuffle实现和hadoop mapreduce shuffle原理
- html的meta总结
- Java NIO Fundamentals