携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第38天,点击查看活动详情
用户拦截器开发的意义:我们开发拦截器的原因是用来记录的轨迹行为,比如用户几点访问我们的应用,都浏览哪些商品,是使用app访问还是使用pc段访问,通过这些数据,我们可以进行数据分析,对应用运营作出合理的规划,锁定用户行为,推荐用户感兴趣的商品,进行合理变现。接下来跟着我一起来创建一个拦截器,加深理解。
1.创建拦截器AccessHistoryInterceptor类文件
public class AccessHistoryInterceptor implements HandlerInterceptor {
private Logger logger = LoggerFactory.getLogger(AccessHistoryInterceptor.class);
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
StringBuilder log = new StringBuilder();
log.append(request.getRemoteAddr());
log.append("|");
log.append(request.getRequestURL());
log.append("|");
log.append(request.getHeader("user-agent"));
logger.info(log.toString());
return true;
}
}
代码说明:
- private Logger logger = LoggerFactory.getLogger(AccessHistoryInterceptor.class);
引入拦截器logger对象 - StringBuilder log = new StringBuilder();:获取log对象
- log.append(request.getRemoteAddr());:获取远程Ip地址
- log.append(request.getRequestURL());:获取访问的url地址
- log.append(request.getHeader("user-agent"));获取浏览器类型
2.pom.xml引入日志依赖
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
3.logback.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%thread] %d %level %logger{10} - %msg%n</pattern>
</encoder>
</appender>
<appender name="accessHistoryLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/Library/WebServer/Documents/logs/history.%d.log</fileNamePattern>
</rollingPolicy>
<encoder>
<pattern>[%thread] %d %level %logger{10} - %msg%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="console"/>
</root>
<logger name="com.imooc.restful.interceptor.AccessHistoryInterceptor"
level="INFO" additivity="false">
<appender-ref ref="accessHistoryLog"/>
</logger>
</configuration>
代码说明:
- [%thread] %d %level %logger{10} - %msg%n:日志输出格式
- ch.qos.logback.core.rolling.RollingFileAppender:以滚动的形式输出日志文件
- fileNamePattern:用来设置日志输出保存的路径
- com.imooc.restful.interceptor.AccessHistoryInterceptor:设置拦截记录的包地址
- additivity="false":false记录到日志文件 true输出到控制台
4.applicationContext.xml配置拦截器
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/resources/**"/>
<bean class="com.imooc.restful.interceptor.AccessHistoryInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
代码说明:
- <mvc:exclude-mapping:排除的目录
- <bean class :定义拦截器的bean类文件
5.启动应用,查看控制台输出
[http-nio-8089-exec-4] 2022-08-27 10:05:03,711 INFO c.i.r.i.AccessHistoryInterceptor - 0:0:0:0:0:0:0:1|http://localhost:8089/restful/request|PostmanRuntime/7.26.8
[http-nio-8089-exec-4] 2022-08-27 10:05:03,766 DEBUG o.s.w.s.m.m.a.RequestResponseBodyMethodProcessor - Using 'text/html;charset=utf-8', given [/] and supported [text/html;charset=utf-8, application/json;charset=utf-8, text/plain, /, application/json, application/*+json]
[http-nio-8089-exec-4] 2022-08-27 10:05:03,766 DEBUG o.s.w.s.m.m.a.RequestResponseBodyMethodProcessor - Writing ["{"message":"返回查询结果"}"]