/** * Parses the servlet context's deployment descriptor file for servlets * that has to be registered in the object manager. * * @return void */ public function parse() { // load the web application base directory $webappPath = $this->getServletContext()->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); // load the object manager instance /** @var \AppserverIo\Appserver\DependencyInjectionContainer\Interfaces\ObjectManagerInterface $objectManager */ $objectManager = $this->getApplication()->search('ObjectManagerInterface'); // prepare and initialize the configuration node $webAppNode = new WebAppNode(); $webAppNode->initFromFile($deploymentDescriptor); /** @var \AppserverIo\Appserver\Core\Api\Node\ServletNode $servletNode */ foreach ($webAppNode->getServlets() as $servletNode) { // iterate over all configured descriptors and try to load object description /** \AppserverIo\Appserver\Core\Api\Node\DescriptorNode $descriptor */ foreach ($objectManager->getConfiguredDescriptors() as $descriptor) { try { // load the descriptor class $descriptorClass = $descriptor->getNodeValue()->getValue(); // load the object descriptor, initialize the servlet mappings and add it to the object manager /** \AppserverIo\Psr\Deployment\DescriptorInterface $objectDescriptor */ if ($objectDescriptor = $descriptorClass::newDescriptorInstance()->fromConfiguration($servletNode)) { /** @var \AppserverIo\Appserver\Core\Api\Node\ServletMappingNode $servletMappingNode */ foreach ($webAppNode->getServletMappings() as $servletMappingNode) { // query whether or not we've to add the URL pattern for the servlet if ((string) $servletNode->getServletName() === (string) $servletMappingNode->getServletName()) { $objectDescriptor->addUrlPattern((string) $servletMappingNode->getUrlPattern()); } } // add the object descriptor for the servlet $objectManager->addObjectDescriptor($objectDescriptor, true); } // proceed with the next descriptor continue; // if class can not be reflected continue with next class } catch (\Exception $e) { // log an error message $this->getApplication()->getInitialContext()->getSystemLogger()->error($e->__toString()); // proceed with the next descriptor continue; } } } // initialize the session configuration if available /** @var \AppserverIo\Appserver\Core\Api\Node\SessionConfigNode $sessionConfig */ if ($sessionConfig = $webAppNode->getSessionConfig()) { foreach ($sessionConfig->toArray() as $key => $value) { $this->getServletContext()->addSessionParameter($key, $value); } } // initialize the error page configuration if available /** @var \AppserverIo\Appserver\Core\Api\Node\ErrorPageNode $errorPageNode */ foreach ($webAppNode->getErrorPages() as $errorPageNode) { $this->getServletContext()->addErrorPage((string) $errorPageNode->getErrorCodePattern(), (string) $errorPageNode->getErrorLocation()); } // initialize the context with the context parameters /** @var \AppserverIo\Appserver\Core\Api\Node\ContextParamNode $contextParamNode */ foreach ($webAppNode->getContextParams() as $contextParamNode) { $this->getServletContext()->addInitParameter((string) $contextParamNode->getParamName(), (string) $contextParamNode->getParamValue()); } }
/** * Parses the servlet context's deployment descriptor file for servlets * that has to be registered in the object manager. * * @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); } } } } }