Companion PR to elastic/elasticsearch#26691

Original commit: elastic/x-pack-elasticsearch@3fceb54809
This commit is contained in:
Yannick Welsch 2017-09-20 10:30:23 +02:00 committed by GitHub
parent 8b1021ccad
commit 8648153f0e
3 changed files with 23 additions and 43 deletions

View File

@ -456,8 +456,8 @@ public class XPackPlugin extends Plugin implements ScriptPlugin, ActionPlugin, I
} }
@Override @Override
public List<Class<? extends ActionFilter>> getActionFilters() { public List<ActionFilter> getActionFilters() {
List<Class<? extends ActionFilter>> filters = new ArrayList<>(); List<ActionFilter> filters = new ArrayList<>();
filters.addAll(licensing.getActionFilters()); filters.addAll(licensing.getActionFilters());
filters.addAll(monitoring.getActionFilters()); filters.addAll(monitoring.getActionFilters());
filters.addAll(security.getActionFilters()); filters.addAll(security.getActionFilters());

View File

@ -42,6 +42,7 @@ import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.settings.SettingsFilter; import org.elasticsearch.common.settings.SettingsFilter;
import org.elasticsearch.common.util.BigArrays; import org.elasticsearch.common.util.BigArrays;
import org.elasticsearch.common.util.concurrent.ThreadContext; import org.elasticsearch.common.util.concurrent.ThreadContext;
import org.elasticsearch.common.util.set.Sets;
import org.elasticsearch.common.xcontent.NamedXContentRegistry; import org.elasticsearch.common.xcontent.NamedXContentRegistry;
import org.elasticsearch.common.xcontent.XContent; import org.elasticsearch.common.xcontent.XContent;
import org.elasticsearch.common.xcontent.XContentFactory; import org.elasticsearch.common.xcontent.XContentFactory;
@ -75,8 +76,11 @@ import org.elasticsearch.xpack.XPackPlugin;
import org.elasticsearch.xpack.XPackSettings; import org.elasticsearch.xpack.XPackSettings;
import org.elasticsearch.xpack.extensions.XPackExtension; import org.elasticsearch.xpack.extensions.XPackExtension;
import org.elasticsearch.xpack.extensions.XPackExtensionsService; import org.elasticsearch.xpack.extensions.XPackExtensionsService;
import org.elasticsearch.xpack.security.action.SecurityActionModule;
import org.elasticsearch.xpack.security.action.filter.SecurityActionFilter; import org.elasticsearch.xpack.security.action.filter.SecurityActionFilter;
import org.elasticsearch.xpack.security.action.interceptor.BulkShardRequestInterceptor;
import org.elasticsearch.xpack.security.action.interceptor.RequestInterceptor;
import org.elasticsearch.xpack.security.action.interceptor.SearchRequestInterceptor;
import org.elasticsearch.xpack.security.action.interceptor.UpdateRequestInterceptor;
import org.elasticsearch.xpack.security.action.realm.ClearRealmCacheAction; import org.elasticsearch.xpack.security.action.realm.ClearRealmCacheAction;
import org.elasticsearch.xpack.security.action.realm.TransportClearRealmCacheAction; import org.elasticsearch.xpack.security.action.realm.TransportClearRealmCacheAction;
import org.elasticsearch.xpack.security.action.role.ClearRolesCacheAction; import org.elasticsearch.xpack.security.action.role.ClearRolesCacheAction;
@ -228,6 +232,7 @@ public class Security implements ActionPlugin, IngestPlugin, NetworkPlugin, Clus
private final SetOnce<SecurityContext> securityContext = new SetOnce<>(); private final SetOnce<SecurityContext> securityContext = new SetOnce<>();
private final SetOnce<ThreadContext> threadContext = new SetOnce<>(); private final SetOnce<ThreadContext> threadContext = new SetOnce<>();
private final SetOnce<TokenService> tokenService = new SetOnce<>(); private final SetOnce<TokenService> tokenService = new SetOnce<>();
private final SetOnce<SecurityActionFilter> securityActionFilter = new SetOnce<>();
private final List<BootstrapCheck> bootstrapChecks; private final List<BootstrapCheck> bootstrapChecks;
public Security(Settings settings, Environment env, XPackLicenseState licenseState, SSLService sslService) public Security(Settings settings, Environment env, XPackLicenseState licenseState, SSLService sslService)
@ -295,7 +300,6 @@ public class Security implements ActionPlugin, IngestPlugin, NetworkPlugin, Clus
b.bind(AuditTrail.class).to(AuditTrailService.class); // interface used by some actions... b.bind(AuditTrail.class).to(AuditTrailService.class); // interface used by some actions...
} }
}); });
modules.add(new SecurityActionModule(settings));
return modules; return modules;
} }
@ -418,6 +422,19 @@ public class Security implements ActionPlugin, IngestPlugin, NetworkPlugin, Clus
securityInterceptor.set(new SecurityServerTransportInterceptor(settings, threadPool, authcService.get(), authzService, licenseState, securityInterceptor.set(new SecurityServerTransportInterceptor(settings, threadPool, authcService.get(), authzService, licenseState,
sslService, securityContext.get(), destructiveOperations)); sslService, securityContext.get(), destructiveOperations));
final Set<RequestInterceptor> requestInterceptors;
if (XPackSettings.DLS_FLS_ENABLED.get(settings)) {
requestInterceptors = Sets.newHashSet(
new SearchRequestInterceptor(settings, threadPool, licenseState),
new UpdateRequestInterceptor(settings, threadPool, licenseState),
new BulkShardRequestInterceptor(settings, threadPool, licenseState));
} else {
requestInterceptors = Collections.emptySet();
}
securityActionFilter.set(new SecurityActionFilter(settings, authcService.get(), authzService, licenseState,
requestInterceptors, threadPool, securityContext.get(), destructiveOperations));
return components; return components;
} }
@ -585,13 +602,13 @@ public class Security implements ActionPlugin, IngestPlugin, NetworkPlugin, Clus
} }
@Override @Override
public List<Class<? extends ActionFilter>> getActionFilters() { public List<ActionFilter> getActionFilters() {
if (enabled == false) { if (enabled == false) {
return emptyList(); return emptyList();
} }
// registering the security filter only for nodes // registering the security filter only for nodes
if (transportClientMode == false) { if (transportClientMode == false) {
return singletonList(SecurityActionFilter.class); return singletonList(securityActionFilter.get());
} }
return emptyList(); return emptyList();
} }

View File

@ -1,37 +0,0 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License;
* you may not use this file except in compliance with the Elastic License.
*/
package org.elasticsearch.xpack.security.action;
import org.elasticsearch.common.inject.multibindings.Multibinder;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.xpack.XPackSettings;
import org.elasticsearch.xpack.security.action.filter.SecurityActionFilter;
import org.elasticsearch.xpack.security.action.interceptor.BulkShardRequestInterceptor;
import org.elasticsearch.xpack.security.action.interceptor.RequestInterceptor;
import org.elasticsearch.xpack.security.action.interceptor.SearchRequestInterceptor;
import org.elasticsearch.xpack.security.action.interceptor.UpdateRequestInterceptor;
import org.elasticsearch.xpack.security.support.AbstractSecurityModule;
public class SecurityActionModule extends AbstractSecurityModule.Node {
public SecurityActionModule(Settings settings) {
super(settings);
}
@Override
protected void configureNode() {
// we need to ensure that there's only a single instance of the action filters
bind(SecurityActionFilter.class).asEagerSingleton();
Multibinder<RequestInterceptor> multibinder
= Multibinder.newSetBinder(binder(), RequestInterceptor.class);
if (XPackSettings.DLS_FLS_ENABLED.get(settings)) {
multibinder.addBinding().to(SearchRequestInterceptor.class);
multibinder.addBinding().to(UpdateRequestInterceptor.class);
multibinder.addBinding().to(BulkShardRequestInterceptor.class);
}
}
}