The tourists, who resumed at 50-2 after a rain-curtailed opening day, moved to 220-7 by tea on the second day at the Sinhalese Sports Club with Pujara holding fort with a watchful 101 not out.
Pujara, who had been dropped for India's last four Tests across Australia, Bangladesh and the ongoing series, may not have played this match if both regular openers Murali Vijay and Shikhar Dhawan were fit.
But the 27-year-old grabbed the chance to notch up his seventh Test century that has so far included nine boundaries.
Amit Mishra was unbeaten on 24, having put on 40 for the eighth wicket with Pujara.
Prasad went to tea with four wickets in the innings, including two off successive balls on either side of the lunch break that reduced India to 119-5.
Just 15 overs were bowled in the 75 minutes of play possible due to rain on the opening day where India lost two wickets after being sent in to bat on a greenish pitch under overcast conditions.
When play resumed under bright skies on the second day, the tourists were restricted to 22 runs in the first 15 overs by some accurate bowling by the Sri Lankans.
Indian skipper Virat Kohli survived a torrid opening over from Prasad in which he was lucky to escape a loud shout for leg-before off the second ball and was beaten by the final ball of the over.
Kohli added four runs to his overnight score of 14 when Sri Lankan captain Angelo Mathews, who replaced Prasad at the bowling crease, had his counterpart caught behind by Kusal Perera.
Rohit Sharma added 55 runs for the fourth wicket with Pujara, scoring 26 with three fours and a six before he edged a catch to first slip off Prasad in what became the final delivery of the morning session.
Prasad, who still had one ball to bowl in the over on resumption, trapped Stuart Binny leg-before with the first delivery to open up India's lower order.
Debutant wicket-keeper Naman Ojha helped Pujara add 54 for the sixth wicket, himself making 21 before he holed out in the deep attempting to smash off-spinner Tharindu Kaushal out of the ground.
Prasad removed Ravichandran Ashwin with the first ball of a new spell, caught behind by Perera for five, but Mishra held his end up till tea.
The series is locked at 1-1 after Sri Lanka won the opening Test in Galle by 63 runs and India drew level with a 278-run win in the second match at the P. Sara Oval in Colombo on Monday. – AFP
Original source: Pujara stands tall for India