AppserverIo\Appserver\ServletEngine\Security\DependencyInjection\DeploymentDescriptorParser::parse PHP Method

parse() public method

Parses the servlet context's deployment descriptor file for servlets that has to be registered in the object manager.
public parse ( ) : void
return void
    public function parse()
    {
        // load the web application base directory
        $webappPath = $this->getAuthenticationContext()->getWebappPath();
        // prepare the deployment descriptor
        $deploymentDescriptor = $webappPath . DIRECTORY_SEPARATOR . 'WEB-INF' . DIRECTORY_SEPARATOR . 'web.xml';
        // query whether we found epb.xml deployment descriptor file
        if (file_exists($deploymentDescriptor) === false) {
            return;
        }
        // validate the passed configuration file
        /** @var \AppserverIo\Appserver\Core\Api\ConfigurationService $configurationService */
        $configurationService = $this->getApplication()->newService('AppserverIo\\Appserver\\Core\\Api\\ConfigurationService');
        $configurationService->validateFile($deploymentDescriptor, null, true);
        // prepare and initialize the configuration node
        $webAppNode = new WebAppNode();
        $webAppNode->initFromFile($deploymentDescriptor);
        // query whether or not we've a login configuration
        /** @var \AppserverIo\Appserver\Core\Api\Node\LoginConfigNode $loginConfig */
        if ($loginConfig = $webAppNode->getLoginConfig()) {
            // create the authentication method instance
            $reflectionClass = new ReflectionClass($this->mapAuthenticator($loginConfig->getAuthMethod()->__toString()));
            $authenticator = $reflectionClass->newInstanceArgs(array($loginConfig, $this->getAuthenticationContext(), new Boolean(true)));
            // add the authentication method itself
            $this->getAuthenticationContext()->addAuthenticator($authenticator);
            // initialize the security roles, that are part of the new security subsystem
            /** @var \AppserverIo\Appserver\Core\Api\Node\SecurityRoleNode $securityRoleNode */
            foreach ($webAppNode->getSecurityRoles() as $securityRoleNode) {
                // do something here
            }
            // initialize the security roles, that are part of the new security subsystem
            /** @var \AppserverIo\Appserver\Core\Api\Node\SecurityConstraintNode $securityContstraintNode */
            foreach ($webAppNode->getSecurityConstraints() as $securityContstraintNode) {
                // prepare the array with the authentication constraint role names
                $roleNames = array();
                if ($authConstraint = $securityContstraintNode->getAuthConstraint()) {
                    $roleNames = $authConstraint->getRoleNamesAsArray();
                }
                /** @var \AppserverIo\Appserver\Core\Api\Node\WebResourceCollectionNode $webResourceCollectionNode */
                foreach ($securityContstraintNode->getWebResourceCollections() as $webResourceCollectionNode) {
                    // prepare the arrays for the HTTP methods and the method omissions
                    $httpMethods = $webResourceCollectionNode->getHttpMethodsAsArray();
                    $httpMethodOmissions = $webResourceCollectionNode->getHttpMethodOmissionsAsArray();
                    /** @var \AppserverIo\Appserver\Core\Api\Node\UrlPatternNode $urlPatternNode */
                    foreach ($webResourceCollectionNode->getUrlPatterns() as $urlPatternNode) {
                        // prepare the URL pattern to authenticator mapping with the necessary data
                        $mapping = new Mapping($urlPatternNode->__toString(), $authenticator->getSerial(), $roleNames, $httpMethods, $httpMethodOmissions);
                        // add the URL pattern to authenticator mapping
                        $this->getAuthenticationContext()->addMapping($mapping);
                    }
                }
            }
        }
    }

Usage Example

 /**
  * Initializes the manager instance.
  *
  * @param \AppserverIo\Psr\Application\ApplicationInterface $application The application instance
  *
  * @return void
  * @see \AppserverIo\Psr\Application\ManagerInterface::initialize()
  *
  * @throws \Exception
  */
 public function initialize(ApplicationInterface $application)
 {
     // query whether or not the web application folder exists
     if (is_dir($this->getWebappPath()) === false) {
         return;
     }
     // initialize the map for the realms
     $realms = new HashMap();
     // query whether or not we've manager configuration found
     /** @var \AppserverIo\Appserver\Core\Api\Node\ManagerNodeInterface $managerNode */
     if ($managerNode = $this->getManagerConfiguration()) {
         // initialize the security domains found in the manager configuration
         /** @var \AppserverIo\Appserver\Core\Api\Node\SecurityDomainNodeInterface $securityDomainNode */
         foreach ($this->getManagerConfiguration()->getSecurityDomains() as $securityDomainNode) {
             // create the realm instance
             $realm = new Realm($this, $securityDomainNode->getName());
             $realm->injectConfiguration($securityDomainNode);
             // add the initialized security domain to the map
             $realms->add($realm->getName(), $realm);
         }
     }
     // inject the map with the realms
     $this->injectRealms($realms);
     // initialize the deployment descriptor parser and parse the web application's deployment descriptor for servlets
     $deploymentDescriptorParser = new DeploymentDescriptorParser();
     $deploymentDescriptorParser->injectAuthenticationContext($this);
     $deploymentDescriptorParser->parse();
 }