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.

Foi útil?

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

  1. Defina um abstract BaseController, sem anotações
  2. Definir métodos concretos e abstratos
  3. 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/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top