我竭力想任何方法來實現你的配置想要的東西。也許別人可以提供解決方案。
快速代碼解決方案這將實現你想會是這樣的:
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;
/**
* <p>
* Determine if the request is about to be handled by a mapping configured
* by <mvc:resources>
* </p>
*
* @param handler
* - the handler to inspect
* @return - true if this is a <mvc:resources> mapped request, false
* otherwise
*/
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);
}
}
然後,您可以有你的HandlerInterceptor實現擴展這個抽象類。因爲< mvc:資源>基本上是註冊ResourceHttpRequestHandler實例的一種簡短方式,這可以確保您的HandlerInterceptor實現簡單地忽略映射爲由一個處理的任何請求。
謝謝你的迴應。我擔心我可能不得不做類似的事情。如果沒有人提出更好的解決方案,我會將其標記爲正確。 – Mike