Primavera: herança do controlador usando a anotação @Controller
-
23-09-2019 - |
Pergunta
Eu gostaria de poder criar um controlador base no meu aplicativo de primavera que, entre outras coisas, determina se um usuário é um usuário registrado ou não. Esse controlador base, seguindo o padrão de design do modelo, conteria um método abstrato protegido que as subclasses do controlador implementariam.
O método abstrato teria passado a ele uma instância de usuário, registrada ou não. No entanto, não tenho idéia de como faria isso, pois parece que, ao usar os controladores, usando a anotação @Controller, cada controlador é gratuito para definir seu método de manuseio de solicitações, como quiserem.
Criar algum tipo de classe de serviço do usuário que é injetado em cada controlador e usado para validar um usuário seria uma maneira de contornar isso? Isso levanta a pergunta (pelo menos para mim) como esse controlador se apega a um httpServletRequest ou no objeto de sessão?
Obrigado.
Solução
Eu acho que o controlador base não é uma boa idéia se o único código que é para ter for para USerauthentication ... em vez disso, use a segurança da primavera. Essa é a melhor opção.
Como alternativa, você pode ter métodos como este ... dê uma olhada na referência da primavera ..
@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
}
Ajudou?
-Sb
Outras dicas
- Defina um
abstract BaseController
, sem anotações - Definir métodos concretos e abstratos
- Chame esses métodos de subclasses (que são anotados com
@Controller
) sempre que necessário.
O problema básico é que o bootstrapping anotacional não é polimórfico. Eu achei este artigo útil: http://sanguinecomputing.com/design-pattern-for-hierárquico-controller-organization-with-annotational-configuration-spring-mvc-3/