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