Tengo un Spring MVC-Controller que genera algún tipo de Byte-Response, que se escribe directamente en Response-Outputstream. Para este caso necesito un controlador con esta firma.

@BodyResponse
@AuthorizedMethod(...)
public void createPdf() {
  // doSomething on response
}

Pero cuando el usuario no está autorizado, quiero mostrarle el formulario de inicio de sesión. Entonces necesito esa firma de método

@AuthorizedMethod(...)
public ModelAndView createPdf() {
  return new ModelAndView("login.jsp");
}

¿Cómo puedo manejar esto?

Saludos, Michael

1
mibutec 25 may. 2012 a las 11:41
1
¿Está utilizando Spring Security? Si es así, el filtro Spring Security redirigirá a un usuario no autorizado antes de que el procesamiento llegue a su controlador.
 – 
Boris Treukhov
25 may. 2012 a las 11:46
No, sin usar Spring MVC, quiero declarar aspectos de seguridad directamente en los métodos (=> controlador) que están asegurados, no en alguna configuración
 – 
mibutec
26 may. 2012 a las 10:05

1 respuesta

La mejor respuesta

Para el caso específico de una verificación de seguridad, generalmente el marco de seguridad se encargaría de hacer una redirección allí automáticamente, a menos que esté haciendo algún tipo de inicio de sesión de 'actualización'.

Para el caso general de su pregunta: hay una trampa especial en HandlerAdapter que deshabilita la resolución de la vista si lee la respuesta y devuelve nulo para ModelAndView.

Lo que esto significa es que si solo toma HttpServletResponse como un parámetro de método y escribe los bytes usted mismo, luego devuelve nulo, Spring no tomará más medidas y confirmará la respuesta.

Luego, en el caso en el que no desee escribir los bytes y en su lugar desee devolver una vista, simplemente devuelva un ModelAndView como de costumbre.

2
Affe 25 may. 2012 a las 11:48