Het is 1941, enkele maanden voor de Japanse aanval op Pearl Harbor. De Amerikaanse geheim agent Paul Soames (John Cusack) is naar het Chinese Shanghai afgereisd om daar de moord op zijn vriend en collega Conor (Jeffrey Dean Morgan) te onderzoeken. De stad is bijna helemaal in handen van de Japanners, en het Chinese verzet loopt op z’n eind. De spanning in de stad is voelbaar.
Om de zaak te kunnen onderzoeken moet Paul diep infiltreren in de plaatselijke onderwereld, die aan elkaar hangt van de eeuwenoude onderwereld en de net zo oude vetes tussen de verschillende Chinese bendes. Daar zijn nu zowel de Japanse maffia als de Japanse geheime dienst bij gekomen, die het toch al fragiele evenwicht verder verstoord hebben. Hij moet zich in de gratie zien te werken bij de lokale machthebbers, zoals de Japanse inlichtingenofficier Tanaka (Ken Watanabe), die een wel erg amicale band heeft met de Chinese gangsterbaas Anthony Lanting (Chow Yun-Fat) en zijn mooie echtgenote Anna (Gong Li).
Paul is met klem opgedragen vooral geen vijanden te maken tijdens het onderzoek. Hij maakt het zich echter nagenoeg onmogelijk als hij een affaire krijgt met Anna. Het wordt pas echt moeilijk als op 7 december de oorlog tussen Japen en Amerika losbarst met de aanval op Pearl Harbor. De laatste Chinese verzetsstrijders worden door de Japanners weggevaagd, en Paul komt voor de meest fundamentele keus te staan: kiest hij voor zijn land of voor de liefde?
De film Shanghai krijgt een zes, hij doet me niet zoveel.