use of org.apache.jackrabbit.core.security.principal.PrincipalProvider in project jackrabbit by apache.
the class DefaultSecurityManager method createDefaultPrincipalProvider.
/**
* Creates the default principal provider used to create the
* {@link PrincipalProviderRegistry}.
*
* @return An new instance of <code>DefaultPrincipalProvider</code>.
* @throws RepositoryException If an error occurs.
*/
protected PrincipalProvider createDefaultPrincipalProvider(Properties[] moduleConfig) throws RepositoryException {
boolean initialized = false;
PrincipalProvider defaultPP = new DefaultPrincipalProvider(this.systemSession, (UserManagerImpl) systemUserManager);
for (Properties props : moduleConfig) {
//GRANITE-4470: apply config to DefaultPrincipalProvider if there is no explicit PrincipalProvider configured
if (!props.containsKey(LoginModuleConfig.PARAM_PRINCIPAL_PROVIDER_CLASS) && props.containsKey(AbstractPrincipalProvider.MAXSIZE_KEY)) {
defaultPP.init(props);
initialized = true;
break;
}
}
if (!initialized) {
defaultPP.init(new Properties());
}
return defaultPP;
}
use of org.apache.jackrabbit.core.security.principal.PrincipalProvider in project jackrabbit by apache.
the class SimpleSecurityManager method init.
//------------------------------------------< JackrabbitSecurityManager >---
/**
* @see JackrabbitSecurityManager#init(Repository, Session)
*/
public void init(Repository repository, Session systemSession) throws RepositoryException {
if (initialized) {
throw new IllegalStateException("already initialized");
}
if (!(repository instanceof RepositoryImpl)) {
throw new RepositoryException("RepositoryImpl expected");
}
this.systemSession = systemSession;
config = ((RepositoryImpl) repository).getConfig().getSecurityConfig();
// read the LoginModule configuration
LoginModuleConfig loginModConf = config.getLoginModuleConfig();
authCtxProvider = new AuthContextProvider(config.getAppName(), loginModConf);
if (authCtxProvider.isLocal()) {
log.info("init: using Repository LoginModule configuration for " + config.getAppName());
} else if (authCtxProvider.isJAAS()) {
log.info("init: using JAAS LoginModule configuration for " + config.getAppName());
} else {
String msg = "No valid LoginModule configuriation for " + config.getAppName();
log.error(msg);
throw new RepositoryException(msg);
}
Properties[] moduleConfig = authCtxProvider.getModuleConfig();
// retrieve default-ids (admin and anonymous) from login-module-configuration.
for (Properties aModuleConfig1 : moduleConfig) {
if (aModuleConfig1.containsKey(LoginModuleConfig.PARAM_ADMIN_ID)) {
adminID = aModuleConfig1.getProperty(LoginModuleConfig.PARAM_ADMIN_ID);
}
if (aModuleConfig1.containsKey(LoginModuleConfig.PARAM_ANONYMOUS_ID)) {
anonymID = aModuleConfig1.getProperty(LoginModuleConfig.PARAM_ANONYMOUS_ID);
}
}
// fallback:
if (adminID == null) {
log.debug("No adminID defined in LoginModule/JAAS config -> using default.");
adminID = SecurityConstants.ADMIN_ID;
}
if (anonymID == null) {
log.debug("No anonymousID defined in LoginModule/JAAS config -> using default.");
anonymID = SecurityConstants.ANONYMOUS_ID;
}
// most simple principal provider registry, that does not read anything
// from configuration
PrincipalProvider principalProvider = new SimplePrincipalProvider();
// skip init of provider (nop)
principalProviderRegistry = new ProviderRegistryImpl(principalProvider);
// register all configured principal providers.
for (Properties aModuleConfig : moduleConfig) {
principalProviderRegistry.registerProvider(aModuleConfig);
}
SecurityManagerConfig smc = config.getSecurityManagerConfig();
if (smc != null && smc.getWorkspaceAccessConfig() != null) {
workspaceAccessManager = smc.getWorkspaceAccessConfig().newInstance(WorkspaceAccessManager.class);
} else {
// fallback -> the default simple implementation
log.debug("No WorkspaceAccessManager configured; using default.");
workspaceAccessManager = new SimpleWorkspaceAccessManager();
}
workspaceAccessManager.init(systemSession);
initialized = true;
}
use of org.apache.jackrabbit.core.security.principal.PrincipalProvider in project jackrabbit by apache.
the class SecurityConfigTest method testPrincipalProviderConfig.
/**
*
* @throws Exception
*/
public void testPrincipalProviderConfig() throws Exception {
PrincipalProviderRegistry ppr = new ProviderRegistryImpl(null);
// standard config
Element xml = parseXML(new InputSource(new StringReader(PRINCIPAL_PROVIDER_CONFIG)), true);
LoginModuleConfig lmc = parser.parseSecurityConfig(xml).getLoginModuleConfig();
PrincipalProvider pp = ppr.registerProvider(lmc.getParameters());
assertEquals(pp, ppr.getProvider(pp.getClass().getName()));
assertEquals("org.apache.jackrabbit.core.security.principal.FallbackPrincipalProvider", pp.getClass().getName());
// config specifying an extra name
xml = parseXML(new InputSource(new StringReader(PRINCIPAL_PROVIDER_CONFIG1)), true);
lmc = parser.parseSecurityConfig(xml).getLoginModuleConfig();
pp = ppr.registerProvider(lmc.getParameters());
assertEquals(pp, ppr.getProvider("test"));
assertEquals("org.apache.jackrabbit.core.security.principal.FallbackPrincipalProvider", pp.getClass().getName());
// use alternative class config
xml = parseXML(new InputSource(new StringReader(PRINCIPAL_PROVIDER_CONFIG2)), true);
lmc = parser.parseSecurityConfig(xml).getLoginModuleConfig();
pp = ppr.registerProvider(lmc.getParameters());
assertEquals(pp, ppr.getProvider("test2"));
assertEquals("org.apache.jackrabbit.core.security.principal.FallbackPrincipalProvider", pp.getClass().getName());
// all 3 providers must be registered despite the fact the all configs
// specify the same provider class
assertEquals(3, ppr.getProviders().length);
}
use of org.apache.jackrabbit.core.security.principal.PrincipalProvider in project sling by apache.
the class PrincipalProviderTracker method addingService.
//~-------------------------------------< ServiceTracker >
@Override
public Object addingService(ServiceReference reference) {
PrincipalProvider provider = (PrincipalProvider) super.addingService(reference);
addProvider(provider, reference);
reloadProviders();
return provider;
}
use of org.apache.jackrabbit.core.security.principal.PrincipalProvider in project jackrabbit by apache.
the class UserPerWorkspaceSecurityManager method getPrincipalProviderRegistry.
private PrincipalProviderRegistry getPrincipalProviderRegistry(SessionImpl s) throws RepositoryException {
String wspName = s.getWorkspace().getName();
synchronized (monitor) {
PrincipalProviderRegistry p = ppRegistries.get(wspName);
if (p == null) {
SystemSession systemSession;
if (s instanceof SystemSession) {
systemSession = (SystemSession) s;
} else {
RepositoryImpl repo = (RepositoryImpl) getRepository();
systemSession = repo.getSystemSession(wspName);
// TODO: review again... this workaround is used in several places.
repo.markWorkspaceActive(wspName);
}
Properties[] moduleConfig = new AuthContextProvider("", ((RepositoryImpl) getRepository()).getConfig().getSecurityConfig().getLoginModuleConfig()).getModuleConfig();
PrincipalProvider defaultPP = new DefaultPrincipalProvider(systemSession, (UserManagerImpl) getUserManager(systemSession));
boolean initialized = false;
for (Properties props : moduleConfig) {
//GRANITE-4470: apply config to DefaultPrincipalProvider if there is no explicit PrincipalProvider configured
if (!props.containsKey(LoginModuleConfig.PARAM_PRINCIPAL_PROVIDER_CLASS) && props.containsKey(AbstractPrincipalProvider.MAXSIZE_KEY)) {
defaultPP.init(props);
initialized = true;
break;
}
}
if (!initialized) {
defaultPP.init(new Properties());
}
p = new WorkspaceBasedPrincipalProviderRegistry(defaultPP);
ppRegistries.put(wspName, p);
}
return p;
}
}
Aggregations