Primero hay que diferenciar entre que cada usuario sólo pueda abrir una sesión y que sólo un usuario pueda abrir sesión.
Hay varias formas de hacerlo, una de ellas sería que guardaras los usuarios logados en el context
http://docs.oracle.com/javaee/6/api/...etContext.html
ya que esto es accesible y común para una aplicación desplegada en un servidor.
Lo único que deberías tener cuidado es que con un bloqueo de sesiones, necesitas que el usuario salga correctamente de su sesión para eliminar los usuarios del context, y por si no lo hace usar HttpSessionListener.
http://docs.oracle.com/javaee/6/api/...nListener.html
Hablo de memoria, así que igual no es del todo correcto.