public function preDispatch()
    {
        parent::preDispatch();

        $action = strtolower($this->getRequest()->getActionName());
        if (in_array($action, $this->authActions)) {
            $auth       = \Zend_Auth::getInstance();
            $this->auth = $auth;

            if (!$auth->hasIdentity()) {
                $config = array(
                    'accept_schemes' => 'basic',
                    'realm'          => GEMS_PROJECT_NAME,
                    'nonce_timeout'  => 3600,
                );
                $adapter         = new \Zend_Auth_Adapter_Http($config);
                $basicResolver   = new \Zend_Auth_Adapter_Http_Resolver_File();

                //This is a basic resolver, use username:realm:password
                //@@TODO: move to a better db stored authentication system

                $basicResolver->setFile(GEMS_ROOT_DIR . '/var/settings/pwd.txt');
                $adapter->setBasicResolver($basicResolver);
                $request  = $this->getRequest();
                $response = $this->getResponse();

                assert($request instanceof \Zend_Controller_Request_Http);
                assert($response instanceof \Zend_Controller_Response_Http);

                $adapter->setRequest($request);
                $adapter->setResponse($response);

                $result = $auth->authenticate($adapter);

                if (!$result->isValid()) {
                    $adapter->getResponse()->sendResponse();
                    print 'Unauthorized';
                    exit;
                }
            }
        }
    }