java ee - heredar - Manejo de excepción de Jersey y filtro
manejo de excepciones en java 8 (1)
La forma de hacerlo depende de si está invocando a Jersey de Spring Security o Spring Security de Jersey.
Si está invocando Spring Security desde dentro del contenedor de Jersey, entonces no debería tener que hacer nada más que definir un asignador de excepciones para la excepción apropiada.
Si está invocando a Jersey solo una vez que el cliente pasa los filtros de Spring Security, Jersey no atrapará las excepciones lanzadas mientras la solicitud del cliente pasa por esos filtros (porque la solicitud aún no ha ingresado en el contenedor de Jersey). Una forma de "obtener" la excepción en el contenedor de Jersey es:
- capture la
AuthenticationException
en un filtro de autenticación personalizado e invoque el métodoAuthenticationFailureHandler.onAuthenticationFailure()
(pasando la excepción), y asegúrese de romper la cadena de filtros no invocandoFilterChain.doFilter()
- configure su
AuthenticationFailureHandler
para llamar a un recurso Jersey de su diseño que recuperará (y luego volverá a lanzar) cualquier excepción generada por Spring conHttpServletRequest.getAttribute(WebAttributes.AUTHENTICATION_EXCEPTION)
Puede haber otras formas de "obtener" la excepción en Jersey-land, pero esta es una de las maneras que me funcionó en el pasado.
Tengo una aplicación de Jersey configurada con la autenticación de manejo de Spring Security. El paquete jersey-spring proporciona la clase SpringServlet que está registrada en mi web.xml como servlet.
Autenticación y todo funciona como se espera. Lo que me pregunto es cómo enviar AuthenticationExceptions (y otras excepciones de filtro) a través del servlet Jersey, para que pueda usar nuestro ExceptionMapper para procesarlos.
Originalmente, el SpringServlet se configuró como un filtro, pero después de leerlo comprendí que un servlet debería ser capaz de manejar las Excepciones lanzadas en los filtros (quizás sea una interpretación incorrecta). No noto ningún cambio en el comportamiento después de cambiarlo a un servlet, y si rastreo a través del código Spring Security puedo ver dónde se está escribiendo HttpServletResponse.
Mi pregunta: ¿es posible que el filtro Spring Security genere excepciones al proceso de servlet de Jersey?