Spring HandlerInterceptorAdapter postHandle有保证吗?
我目前有两个处理类似function的拦截器。 我想合并这些。
一个拦截器是访问请求记录器,它显示登录用户,会话ID和请求的URL。
另一个拦截器是一个进程时间记录器。
访问记录器为了记录必须记录的所有记录,请在preHandle方法中记录请求。 我们的想法是,不管之后发生了什么(例如,例外),确切的访问请求都会存在。
但是,由于其性质,进程时间记录器必须登录postHandle方法。
为了合并这个function,我必须将所有内容都移动到一个postHandle方法中。 但是,如果在某处发生exception,我似乎可能会丢失一些日志记录,尤其是在应用程序代码中尚未正确处理的exception。
这些考虑是否有任何保证或说明?
您可以考虑合并afterCompletion中的逻辑,即使在处理程序方法抛出exception的情况下也会调用该逻辑。 一个很好的在线示例
public class RequestProcessingTimeInterceptor extends HandlerInterceptorAdapter { private static final Logger logger = LoggerFactory .getLogger(RequestProcessingTimeInterceptor.class); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { long startTime = System.currentTimeMillis(); logger.info("Request URL::" + request.getRequestURL().toString() + ":: Start Time=" + System.currentTimeMillis()); request.setAttribute("startTime", startTime); //if returned false, we need to make sure 'response' is sent return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("Request URL::" + request.getRequestURL().toString() + " Sent to Handler :: Current Time=" + System.currentTimeMillis()); //we can add attributes in the modelAndView and use that in the view page } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { long startTime = (Long) request.getAttribute("startTime"); logger.info("Request URL::" + request.getRequestURL().toString() + ":: End Time=" + System.currentTimeMillis()); logger.info("Request URL::" + request.getRequestURL().toString() + ":: Time Taken=" + (System.currentTimeMillis() - startTime)); } }
- 使用Apache Commons Math确定置信区间
- java.util.ConcurrentModificationException在预期时不会抛出
- 半透明的JFrame边框
- 用于IntelliJ IDEA的OpenJDK或Sun Java
- java.lang.OutOfMemoryError:压缩类空间
- Tomcat无法启动 – java.lang.ClassNotFoundException:org.hibernate.Query
- webstart-maven-plugin的新条目会破坏应用程序
- Java FRANCE / FRENCH Locale千位分隔符看起来像空间但实际上不是
- 如何让Spring-Security以401格式返回401响应?