Spring: наследование контроллера с использованием аннотации @Controller

Я хотел бы иметь возможность создать базовый контроллер в моем приложении Spring, который, среди прочего, определяет, является ли пользователь зарегистрированным пользователем или нет. Этот базовый контроллер, следуя шаблону дизайна шаблона, будет содержать абстрактный защищенный метод, который будут реализовывать подклассы контроллера.

абстрактный метод передал бы ему экземпляр пользователя, зарегистрированный или иным образом. Однако я понятия не имею, как я это сделаю, так как кажется, что с помощью контроллеров чисто используя аннотацию @Controller, каждый контроллер может определить свой метод обработки запросов, как им нравится.

будет ли создание какого-то класса пользовательского сервиса, который вводится в каждый контроллер и используется для проверки пользователя, одним из способов обойти это? Напрашивается вопрос (по крайней мере для меня) как такой контроллер достать HttpServletRequest или объект сеанса?

спасибо.

3 ответов


Я думаю, что базовый контроллер не является хорошей идеей, если единственный код, который он должен иметь, для UserAuthentication...вместо этого используйте Spring security. Это лучший вариант.

кроме того, у вас могут быть такие методы...взгляните на весеннюю справку..

@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

}

помогло ли это?

- SB


  1. определение abstract BaseController, без аннотации
  2. определить конкретные и абстрактные методы
  3. вызывать эти методы из подклассов (которые аннотируются @Controller), когда это необходимо.

основная проблема заключается в том, что annotational загрузчик не полиморфные. Я нашел этот документ полезным: http://sanguinecomputing.com/design-pattern-for-hierarchical-controller-organization-with-annotational-configuration-spring-mvc-3/