I'm struggling to come up with some kind of method to achieve what you want in the configuration. Maybe someone else can offer a solution.
A quick code solution that achieves what you want will be something like this:
public abstract class ResourceExcludingHandlerInterceptor implements HandlerInterceptor { @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { if (!isResourceHandler(handler)) { doAfterCompletion(request, response, handler, ex); } } public abstract void doAfterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception; public abstract void doPostHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception; public abstract boolean doPreHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception; private boolean isResourceHandler(Object handler) { return handler instanceof ResourceHttpRequestHandler; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { if (!isResourceHandler(handler)) { doPostHandle(request, response, handler, modelAndView); } } @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { return isResourceHandler(handler) ? true : doPreHandle(request, response, handler); } }
After that, you could extend the implementation of this abstract class in HandlerInterceptor implementations. As <mvc: resources> is basically a short way to register ResourceHttpRequestHandler instances, this ensures that HandlerInterceptor implementations simply ignore any requests that are displayed for processing by one.
source share