Barcelona deservedly clinched a Champions League final place against Arsenal in Paris after a draw with AC Milan at the Nou Camp.
Barcelona's Ronaldinho is held by AC Milan captain Costacurta
Milan keeper Dida kept Barcelona at bay, saving twice from Samuel Eto'o and also denying Henrik Larsson.
Juliano Belletti missed an open goal after the break as Barcelona dominated.
Andriy Shevchenko missed Milan's best chance and had a goal ruled out, but Barcelona defended a narrow first-leg lead and now play Arsenal on 17 May.
Milan were in desperate need of an early goal, and Kaka almost provided it inside the first minute when he shot narrowly wide.
But Barcelona soon seized the initiative, and Eto'o twice had chances to score the goal that would have virtually stamped their passport into the final.
Milan keeper Dida plunged bravely at his feet to save, then in the 15th minute he denied Eto'o again with a vital block that allowed Alessandro Costacurta to clear to safety.
But the Italian giants were not to be discounted and Shevchenko should have done better than shoot into the side-netting seven minutes later.
Shevchenko then headed straight at Victor Valdes four minutes after half-time as the pressure mounted on Milan to make the breakthrough.
Belletti should have put Barcelona in front after 53 minutes when he was set up by a brilliant combination from Ronaldinho and Ludovic Giuly.
Giuly then volleyed narrowly over from Ronaldinho's cross as the play switched from end to end.
Both sides made changes after 67 minutes, Barcelona sending on Henrik Larsson for Giuly and Milan replacing Gennaro Gattuso with the more attack-minded Rui Costa.
The Swede almost marked his entry with a goal seven minutes later when he met Eto'o's cross with a diving header, but he could only direct it straight at the defiant Dida.
There was instant drama when Shevchenko headed home, but referee Markus Merk ruled the goal out for a foul on Carles Puyol, a decision that infuriated the Milan bench.
Barcelona then kept possession for long periods to frustrate Milan and clinch their place in the final.
Barcelona: Valdes, Belletti, Marquez, Puyol, Van Bronckhorst, Iniesta, Edmilson, Deco, Giuly (Larsson 68), Eto'o (Van Bommel 89), Ronaldinho.
Subs Not Used: Jorquera, Motta, Maxi Lopez, Sylvinho, Gabri.
AC Milan: Dida, Stam, Costacurta (Cafu 64), Kaladze, Serginho, Gattuso (Rui Costa 68), Pirlo, Seedorf, Shevchenko, Kaka, Inzaghi (Gilardino 80).
Subs Not Used: Kalac, Maldini, Vogel, Jankulovski.
Ref: Markus Merk (Germany).