The way I typically do this for web apps is to use a filter in front of the controller and the view. I actually don't do this for HIbernate, as I typically utilize Hibernate behind an EJB layer. But I use it with great success for anything which I don't want clutterring up the controller.
As far as you book, it depends on how you are utilizing the controller concept. Your struts book is of course talking about the specific way struts uses this pattern. But I have been involved with projects where the controller is meant to coordinate all system interactions for a given request, not just "where do I go next".
As far as a cleaner MVC implementation, take a look at the Tapestry project. There, part of your request cycle could be starting a transaction and opening a session at the start of the request cycle and closing and commiting.rolling-back at the end. And, the Application impl would be an ideal place to hold the Hibernate SessionFactory.
Quote:
cause we can't have a user in ldap which isn't in the database
You do realize that the other extreme is a possibility in your set up, right? insertUser() succeeds, but insertUserIntoLDAP() fails. Now you have a user in your database who is not in LDAP...