Match ends, Millwall 1, Bradford City 1.
Millwall drew at home to Bradford to seal a 4-2 aggregate win and reach the League One play-off final at Wembley.
The Lions, who won the semi-final first leg 3-1, looked to have put the tie to bed when Lee Gregory slotted home.
But Jamie Proctor's strike just before half-time, after Jordan Archer blocked his first effort, gave City hope.
Proctor then wasted a further chance moments later, and it proved costly as Millwall held on to set up a showdown with Barnsley on 29 May.
Neil Harris' side were rarely troubled after Proctor twice turned down the opportunity to shoot when excellently placed - and, if anything, they looked the more likely to score again after the break.
Centre-half Byron Webster came closest, sending a header narrowly wide of Ben Williams' post, as the second leg petered out in front of a raucous crowd at The Den.
The first leg holds the key
Millwall's success against Bradford means that, across this season's Football League play-offs, all five teams who won the first leg of their semi-final went on to reach Wembley.
The majority of the damage was done even before half-time at Valley Parade, where goals from Gregory, Steve Morison and Joe Martin had put the Lions in full command against Bradford.
The Bantams have twice previously come back from a first-leg deficit to progress to the final and win promotion, but Gregory's calm, side-footed finish ensured there would be no repeat in south-east London.
Millwall must now beat Barnsley, who thumped Walsall 6-1 over two legs in the other semi-final, if they are to secure an instant return to the Championship.
Millwall manager Neil Harris:
"I'm delighted for the players, They deserved it over the two legs.
"We really had to battle, both tonight and last Sunday. It was tough but we've earned our place at Wembley.
"Barnsley will be really tough opponents. They've done brilliantly all season and especially against Walsall."
- 17WebsterSubstituted forCraigat 90+2'minutes
- 19TaylorBooked at 86mins
- 18FergusonBooked at 86mins
- 9GregorySubstituted forWilliamsat 89'minutes
- 23McArdleBooked at 85mins
- 5ClarkeSubstituted forDaviesat 74'minutes
- 29McMahonSubstituted forAndersonat 67'minutes
- 4EvansBooked at 79mins
- 12CullenSubstituted forThorpeat 45'minutes
- 17ReidBooked at 88mins
- Tim Robinson
- Shots on Target
Second Half ends, Millwall 1, Bradford City 1.
Delay over. They are ready to continue.
Delay in match (Bradford City).
Foul by Rory McArdle (Bradford City).
Steve Morison (Millwall) wins a free kick in the defensive half.
Substitution, Millwall. Tony Craig replaces Byron Webster because of an injury.
Corner, Bradford City. Conceded by Steve Morison.
Corner, Bradford City. Conceded by Shaun Williams.
Substitution, Millwall. Shaun Williams replaces Lee Gregory.
Kyel Reid (Bradford City) is shown the yellow card for a bad foul.
Foul by Kyel Reid (Bradford City).
Ben Thompson (Millwall) wins a free kick in the defensive half.
Shane Ferguson (Millwall) is shown the yellow card.
Lee Evans (Bradford City) wins a free kick in the attacking half.
Foul by Shane Ferguson (Millwall).
Attempt blocked. Lee Evans (Bradford City) right footed shot from more than 35 yards is blocked.
Chris Taylor (Millwall) is shown the yellow card.
Billy Clarke (Bradford City) wins a free kick in the defensive half.
Foul by Ben Thompson (Millwall).