Manejar las excepciones de autenticación de seguridad de primavera con @ExceptionHandler

Estoy usando Spring MVC's@ControllerAdvice y@ExceptionHandler para manejar todas las excepciones de una API REST. Funciona bien para las excepciones generadas por los controladores web mvc, pero no funciona para las excepciones generadas por los filtros personalizados de seguridad Spring porque se ejecutan antes de invocar los métodos del controlador.

Tengo un filtro de seguridad de resorte personalizado que hace una autenticación basada en token:

public class AegisAuthenticationFilter extends GenericFilterBean {

...

    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {

        try {

            ...         
        } catch(AuthenticationException authenticationException) {

            SecurityContextHolder.clearContext();
            authenticationEntryPoint.commence(request, response, authenticationException);

        }

    }

}

Con este punto de entrada personalizado:

@Component("restAuthenticationEntryPoint")
public class RestAuthenticationEntryPoint implements AuthenticationEntryPoint{

    public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authenticationException) throws IOException, ServletException {
        response.sendError(HttpServletResponse.SC_UNAUTHORIZED, authenticationException.getMessage());
    }

}

Y con esta clase para manejar excepciones a nivel mundial:

@ControllerAdvice
public class RestEntityResponseExceptionHandler extends ResponseEntityExceptionHandler {

    @ExceptionHandler({ InvalidTokenException.class, AuthenticationException.class })
    @ResponseStatus(value = HttpStatus.UNAUTHORIZED)
    @ResponseBody
    public RestError handleAuthenticationException(Exception ex) {

        int errorCode = AegisErrorCode.GenericAuthenticationError;
        if(ex instanceof AegisException) {
            errorCode = ((AegisException)ex).getCode();
        }

        RestError re = new RestError(
            HttpStatus.UNAUTHORIZED,
            errorCode, 
            "...",
            ex.getMessage());

        return re;
    }
}

Lo que tengo que hacer es devolver un cuerpo JSON detallado incluso para la excepción de autenticación de seguridad Spring. ¿Hay alguna manera de que Spring Security AuthenticationEntryPoint y spring mvc @ExceptionHandler trabajen juntos?

Estoy usando spring security 3.1.4 y spring mvc 3.2.4.

Respuestas a la pregunta(8)

Su respuesta a la pregunta