Spring: наследование контроллера с использованием аннотации @Controller - PullRequest
7 голосов
/ 27 января 2010

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

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

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

Спасибо.

Ответы [ 3 ]

14 голосов
/ 27 января 2010
  1. Определить abstract BaseController, без аннотаций
  2. Определить конкретные и абстрактные методы
  3. При необходимости вызывать эти методы из подклассов (которые отмечены @Controller).
1 голос
/ 27 января 2010

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

Кроме того, у вас могут быть такие методы ... посмотрите на ссылку 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

}

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

-SB

0 голосов
/ 28 апреля 2013

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...