spring - proyecto - Primavera: herencia del controlador usando la anotación @Controller
spring mvc pdf (3)
Creo que el Controlador Base no es una buena idea si el único código que tiene es para la Autentificación del Usuario ... en su lugar use la seguridad de Primavera. Esta es la mejor opcion.
Alternativamente, puede tener métodos como este ... eche un vistazo a la referencia de Spring ..
@Controller("loginController")
public class LoginController {
@RequestMapping(value="/login.do", method=RequestMethod.POST)
public String login(Model model, HttpServletRequest request) {
String userIdFromRequest = (String)request.getParameter("userId");
String password = (String)request.getParameter("password");
boolean verified = ...send userIdFromRequest and password to the user service for
verification...
if (verified){
request.getSession().setAttribute("userId", userIdFromRequest);
}
}
//More Methods
}
¿Ayudó?
-SB
Me gustaría poder crear un controlador base en mi aplicación Spring que, entre otras cosas, determine si un usuario es un usuario registrado o no. Este controlador base, siguiendo el patrón de diseño de la plantilla, contendría un método abstracto protegido que implementarían las subclases de controlador.
El método abstracto le hubiera pasado una instancia de Usuario, registrado o no. Sin embargo, no tengo idea de cómo haría esto, ya que parece que al usar controladores que usan puramente la anotación @Controller, cada controlador es libre de definir su método de manejo de solicitudes como prefiera.
¿Sería una manera de evitar esto crear un tipo de clase de servicio al usuario que se inyecta en cada controlador y se utiliza para validar a un usuario? Esto plantea la pregunta (al menos para mí) ¿cómo puede un controlador obtener una HttpServletRequest o el objeto Session?
Gracias.
El problema básico es que el bootstrapping de anotación no es polimórfico. Encontré este documento útil: http://sanguinecomputing.com/design-pattern-for-hierarchical-controller-organization-with-annotational-configuration-spring-mvc-3/
- Definir un
abstract BaseController
, sin anotaciones - Definir métodos concretos y abstractos
- Llame a estos métodos desde subclases (que están anotadas con
@Controller
) siempre que sea necesario.