With the score tied at 66, Johnson hit a 3 with 55 seconds left to play to put the Leopards (7-11, 2-1) in front 69-66. O.J. Avworo answered with a layup to pull the Midshipmen (5-14, 0-3) within one with 32 seconds left.
Johnson was fouled on the ensuing inbounds and connected on both free-throw attempts to put Lafayette back in front by three, 71-68, with 29 seconds remaining.
The Leopards went 5 for 6 from the free-throw line the rest of the way to seal the victory.
Jared Mintz led Lafayette with 20 points. Jim Mower added 13 points and Johnson finished with 11.
Jordan Sugars scored 15 points to lead the Navy, which has lost eight of its last nine games. J.J. Avila and Isaiah Roberts added 13 apiece.