A fairly uneventful contest on Teesside was settled by Johnson's half-volley eight minutes from time as The Reds suffered defeat for the first time under manager Chris Hughton.
Hughton made three changes to the side that drew 1-1 at Luton on Wednesday night as Luke Freeman and Miguel Guerrero replaced Joe Lolley and Lyle Taylor respectively while Gaetan Bong made his first start since February as he came in for the suspended Nicholas Ioannou.
Forest were unbeaten in their last four meetings against Boro but it was a cagey start at the Riverside as both sides struggled to find any attacking fluency. Ryan Yates had the first real shot in anger of the afternoon but his dipping volley from 25 yards cleared Marcus Bettinelli's crossbar by a distance.
Hayden Coulson had a good opportunity for the home side four minutes later as he raced into the penalty area but the Boro academy graduate shot straight at Brice Samba and the Forest stopper was able to push the ball away to safety as the home side began to take control of the contest.
Former Reds striker Britt Assombalonga had not scored against the club since his departure from The City Ground but he had a golden chance to do so shortly after the half-hour mark. Yates's poor back-pass set Assombalonga through on goal but Samba saved well with his legs and Marcus Tavernier blazed the rebound over the bar and into the South Stand.
Hughton made a change at half-time as Lolley replaced Sammy Ameobi but The Reds still struggled to create anything going forward in the early stages of the second half. The closest they came was on 64 minutes when Yates flicked Anthony Knockaert's corner inches wide of the far post with Bettinelli well beaten.
Middlesbrough got the goal their second-half positivity deserved with eight minutes of the game to play. George Saville delivered an excellent cross from the right-hand side and Johnson was there at the far post to drive a half-volley beyond Samba and put the home side into a late lead.
That proved to be the final nail in the coffin for The Reds who failed to create a chance of note throughout the entire 90 minutes and were left to contemplate a poor performance and a disappointing defeat.
Forest: Samba; Christie, Figueiredo, McKenna, Bong; Colback (c), Yates; Ameobi (Lolley 46'), Freeman (Cafu 64'), Knockaert; Guerrero (Taylor 78')
Subs not used: Smith, Mbe Soh, Jenkinson, Sow
Bookings: Figueiredo 54', Bong 87'
Middlesbrough: Bettinelli; Dijksteel, Wood, McNair, Bola; Tavernier, Morsy (Spence 34'), Saville, Howson, Coulson (Johnson 78'); Assombalonga (c) (Akpom 70')
Subs not used: Stojanovic, Wing, Browne, Roberts
Goal: Johnson 81'
Booking: Morsy 17'
Referee: Lee Mason