here is an example of Customer->AccountController. In the controller you have override mention mention predispatch function as mentioned below:
public function preDispatch()
{
$action = $this->getRequest()->getActionName();
$ExitsopenActions = array(
'create',
'login',
'logoutsuccess',
'forgotpassword',
'forgotpasswordpost',
'changeforgotten',
'resetpassword',
'resetpasswordpost',
'confirm',
'confirmation'
);
$newOpenAction=array('passwordreset');
$allActions=array_merge($ExitsopenActions,$newOpenAction);
$Custompattern = '/^(' . implode('|', $newOpenAction) . ')/i';
if (preg_match($Custompattern, $action)) {
$this->getRequest()->setActionName('create');
}
parent::preDispatch();
if ($action != $this->getRequest()->getActionName())
{
$this->getRequest()->setActionName($action);
}
if (!$this->getRequest()->isDispatched()) {
return;
}
$mypattern = '/^(' . implode('|', $allActions) . ')/i';
if (!preg_match($mypattern, $action)) {
if (!$this->_getSession()->authenticate($this)) {
$this->setFlag('', 'no-dispatch', true);
}
} else {
$this->_getSession()->setNoReferer(true);
}
}
$ExitsopenActions consists of all the actions that are there in the native.
$newOpenAction consists of all the new actions you want to add.