Spring:使用@Controller注释的控制器继承

时间:2010-01-27 05:10:00

标签: spring controller annotations single-table-inheritance

我希望能够在我的Spring应用程序中创建一个基本控制器,除其他外,它确定用户是否是注册用户。遵循模板设计模式的此基本控制器将包含控制器子类将实现的抽象受保护方法。

抽象方法会向其传递一个User实例,已注册或以其他方式。但是,我不知道如何做到这一点,因为通过使用纯粹使用@Controller注释的控制器,每个控制器都可以自由地定义他们的请求处理方法,但是他们喜欢。

创建某种用户服务类会注入每个控制器并用于验证用户是一种解决此问题的方法吗?这引出了一个问题(至少对我而言)这样的控制器如何获得HttpServletRequest或Session对象?

感谢。

3 个答案:

答案 0 :(得分:14)

  1. 定义abstract BaseController,没有注释
  2. 定义具体和抽象方法
  3. 在需要时从子类(使用@Controller注释)调用这些方法。

答案 1 :(得分:1)

我认为基本控制器不是一个好主意,如果它的唯一代码是UserAuthentication ...而是使用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

答案 2 :(得分:0)