Skip to content

Commit

Permalink
[WFLY-9853] Register JbossPolicyRegistration in the subsystem boot to…
Browse files Browse the repository at this point in the history
… avoid JNDI lookup exceptions every time an authorization check is performed
  • Loading branch information
sguilhen authored and jurakp committed Feb 19, 2018
1 parent d734b21 commit 1255296
Showing 1 changed file with 23 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -29,22 +29,30 @@

import javax.security.jacc.PolicyContext;

import org.jboss.as.naming.ServiceBasedNamingStore;
import org.jboss.as.naming.ValueManagedReferenceFactory;
import org.jboss.as.naming.deployment.ContextNames;
import org.jboss.as.naming.service.BinderService;
import org.jboss.as.security.SecurityExtension;
import org.jboss.as.security.logging.SecurityLogger;
import org.jboss.as.security.plugins.ModuleClassLoaderLocator;
import org.jboss.as.server.moduleservice.ServiceModuleLoader;
import org.jboss.modules.ModuleLoadException;
import org.jboss.msc.inject.Injector;
import org.jboss.msc.service.Service;
import org.jboss.msc.service.ServiceController;
import org.jboss.msc.service.ServiceName;
import org.jboss.msc.service.ServiceTarget;
import org.jboss.msc.service.StartContext;
import org.jboss.msc.service.StartException;
import org.jboss.msc.service.StopContext;
import org.jboss.msc.value.InjectedValue;
import org.jboss.msc.value.Values;
import org.jboss.security.SecurityConstants;
import org.jboss.security.auth.callback.CallbackHandlerPolicyContextHandler;
import org.jboss.security.jacc.SubjectPolicyContextHandler;
import org.jboss.security.plugins.ClassLoaderLocatorFactory;
import org.jboss.security.plugins.JBossPolicyRegistration;
import org.wildfly.security.manager.WildFlySecurityManager;

/**
Expand Down Expand Up @@ -74,6 +82,8 @@ public class SecurityBootstrapService implements Service<Void> {

private static final String JACC_POLICY_PROVIDER = "javax.security.jacc.policy.provider";

private static final String POLICY_REGISTRATION = "policyRegistration";

public SecurityBootstrapService(boolean initializeJacc) {
this.initializeJacc = initializeJacc;
}
Expand All @@ -85,6 +95,7 @@ public void start(StartContext context) throws StartException {
//Print out the current version of PicketBox
SecurityLogger.ROOT_LOGGER.currentVersion(org.picketbox.Version.VERSION);
initializeJacc();
setupPolicyRegistration(context);
}

private void initializeJacc() throws StartException {
Expand Down Expand Up @@ -137,6 +148,18 @@ private void initializeJacc() throws StartException {
}
}

private void setupPolicyRegistration(final StartContext context) {
ServiceTarget target = context.getChildTarget();
final BinderService binderService = new BinderService(POLICY_REGISTRATION);
target.addService(ContextNames.buildServiceName(ContextNames.JAVA_CONTEXT_SERVICE_NAME, POLICY_REGISTRATION), binderService)
.addDependency(ContextNames.JAVA_CONTEXT_SERVICE_NAME, ServiceBasedNamingStore.class, binderService.getNamingStoreInjector())
.addInjection(binderService.getManagedObjectInjector(), new ValueManagedReferenceFactory(
Values.immediateValue(new JBossPolicyRegistration())))
.setInitialMode(ServiceController.Mode.ACTIVE)
.install();

}

private Class<?> loadClass(final String module, final String className) throws ClassNotFoundException, ModuleLoadException {
if (module != null) {
return SecurityActions.getModuleClassLoader(module).loadClass(className);
Expand Down

0 comments on commit 1255296

Please sign in to comment.