The @SessionAttribute annotation mentioned by @uthark is not suitable for this task - I thought it was too, but a bit of reading shows otherwise:
Session attributes as indicated using
  this annotation correspond to a
  specific handler's model attributes,
  getting transparently stored in a
  conversational session. Those
  attributes will be removed once the
  handler indicates completion of its
  conversational session. Therefore, use
  this facility for such conversational
  attributes which are supposed to be
  stored in the session temporarily
  during the course of a specific
  handler's conversation.
For permanent session attributes, e.g.
  a user authentication object, use the
  traditional session.setAttribute
  method instead. Alternatively,
  consider using the attribute
  management capabilities of the generic
  WebRequest interface.
In other words, @SessionAttribute is for storing conversation MVC-model objects in the session (as opposed to storing them as request attributes). It's not intended for using with arbitrary session attributes. As you discovered, it only works if the session attribute is always there.
I'm not aware of any other alternative, I think you're stuck with HttpSession.getAttribute()