Spring: controller inheritance using @Controller annotation

richever picture richever · Jan 27, 2010 · Viewed 10.1k times · Source

I'd like to be able to create a base controller in my Spring app that, among other things, determines if a user is a registered user or not. This base controller, following the template design pattern, would contain an abstract protected method that controller subclasses would implement.

The abstract method would have passed to it an instance of User, registered or otherwise. However, I have no idea how I would do this since it seems that by using controllers purely using the @Controller annotation each controller is free to define their request handling method however they like.

Would creating some sort of user service class that is injected into each controller and used to validate a user be one way to get around this? This begs the question (at least for me) how does such a controller get a hold of a HttpServletRequest or the Session object?

Thanks.

Answer

Bozho picture Bozho · Jan 27, 2010
  1. Define an abstract BaseController, with no annotations
  2. Define concrete and abstract methods
  3. Call these methods from subclasses (which are annotated with @Controller) whenever needed.