/** * 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); } } } } }