示例代码
下面是一个示例代码,演示了如何创建一个拦截器。该拦截器在请求处理前输出日志,同时在请求处理完成后记录请求处理时间。
代码语言:javascript复制public class LoggingInterceptor implements HandlerInterceptor {
private static final Logger logger = LoggerFactory.getLogger(LoggingInterceptor.class);
private long startTime;
// 在请求处理前执行
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
startTime = System.currentTimeMillis();
logger.info("Request URL: " request.getRequestURL());
return true;
}
// 在请求处理后执行,在视图渲染前
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
logger.info("Time Taken: " (System.currentTimeMillis() - startTime));
}
// 在请求处理完成后执行,也就是在视图渲染完成后执行
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// Do nothing
}
}
在上面的示例中,我们实现了 LoggingInterceptor
类,该类实现了 HandlerInterceptor
接口。在 preHandle()
方法中,我们记录了请求处理开始的时间,并输出了请求的 URL。在 postHandle()
方法中,我们计算了请求处理所需的时间,并输出到日志中。在 afterCompletion()
方法中,我们不需要做任何操作,因此该方法为空。
接下来,我们需要将拦截器注册到 Spring MVC 中。我们可以在 Spring MVC 配置文件中进行配置,如下所示:
代码语言:javascript复制<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.example.LoggingInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
在上面的示例中,我们定义了一个拦截器,将其应用到所有的请求上。这意味着,所有的请求都会被该拦截器拦截,并进行日志记录。