mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-21 21:25:38 +00:00
bug6154: record failed access token authentication only if replication isn't currently starting
This commit is contained in:
@@ -2,6 +2,7 @@ package com.sap.sse.security;
|
||||
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.concurrent.Future;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import org.apache.shiro.authc.AuthenticationException;
|
||||
@@ -49,7 +50,7 @@ public class BearerTokenRealm extends AbstractCompositeAuthorizingRealm {
|
||||
logger.warning("Cannot check whether client IP/User-Agent is locked for bearer token-based authentication; security service not found");
|
||||
}
|
||||
} catch (InterruptedException | ExecutionException e) {
|
||||
e.printStackTrace();
|
||||
logger.log(Level.SEVERE, "Error retrieving security service", e);
|
||||
}
|
||||
final User user = getUserStore().getUserByAccessToken(accessToken.getCredentials());
|
||||
if (user == null) {
|
||||
|
||||
@@ -20,6 +20,7 @@ import com.sap.sse.classloading.ServiceTrackerCustomizerForClassLoaderSupplierRe
|
||||
import com.sap.sse.mail.MailService;
|
||||
import com.sap.sse.replication.Replicable;
|
||||
import com.sap.sse.replication.ReplicationMasterDescriptor;
|
||||
import com.sap.sse.replication.ReplicationService;
|
||||
import com.sap.sse.rest.CORSFilterConfiguration;
|
||||
import com.sap.sse.security.SecurityInitializationCustomizer;
|
||||
import com.sap.sse.security.SecurityService;
|
||||
@@ -211,9 +212,10 @@ public class Activator implements BundleActivator {
|
||||
hasPermissionsProviderTracker.open();
|
||||
SecurityService initialSecurityService = new SecurityServiceImpl(
|
||||
ServiceTrackerFactory.createAndOpen(context, MailService.class),
|
||||
ServiceTrackerFactory.createAndOpen(context, CORSFilterConfiguration.class), userStore,
|
||||
accessControlStore, new OSGIHasPermissionsProvider(hasPermissionsProviderTracker),
|
||||
subscriptionPlanProvider, sharedAcrossSubdomainsOf, baseUrlForCrossDomainStorage);
|
||||
ServiceTrackerFactory.createAndOpen(context, CORSFilterConfiguration.class),
|
||||
ServiceTrackerFactory.createAndOpen(context, ReplicationService.class),
|
||||
userStore, accessControlStore,
|
||||
new OSGIHasPermissionsProvider(hasPermissionsProviderTracker), subscriptionPlanProvider, sharedAcrossSubdomainsOf, baseUrlForCrossDomainStorage);
|
||||
initialSecurityService.initialize();
|
||||
securityService.complete(initialSecurityService);
|
||||
registration = context.registerService(SecurityService.class, initialSecurityService, null);
|
||||
|
||||
@@ -103,6 +103,7 @@ import com.sap.sse.concurrent.LockUtil;
|
||||
import com.sap.sse.concurrent.NamedReentrantReadWriteLock;
|
||||
import com.sap.sse.i18n.impl.ResourceBundleStringMessagesImpl;
|
||||
import com.sap.sse.mail.MailService;
|
||||
import com.sap.sse.replication.ReplicationService;
|
||||
import com.sap.sse.replication.interfaces.impl.AbstractReplicableWithObjectInputStream;
|
||||
import com.sap.sse.rest.CORSFilterConfiguration;
|
||||
import com.sap.sse.security.Action;
|
||||
@@ -244,6 +245,8 @@ implements ReplicableSecurityService, ClearStateTestSupport {
|
||||
private final ServiceTracker<MailService, MailService> mailServiceTracker;
|
||||
|
||||
private final ServiceTracker<CORSFilterConfiguration, CORSFilterConfiguration> corsFilterConfigurationTracker;
|
||||
|
||||
private final ServiceTracker<ReplicationService, ReplicationService> replicationServiceTracker;
|
||||
|
||||
private ThreadLocal<UserGroup> temporaryDefaultTenant = new InheritableThreadLocal<>();
|
||||
|
||||
@@ -322,8 +325,8 @@ implements ReplicableSecurityService, ClearStateTestSupport {
|
||||
ServiceTracker<CORSFilterConfiguration, CORSFilterConfiguration> corsFilterConfigurationTracker,
|
||||
UserStore userStore, AccessControlStore accessControlStore, HasPermissionsProvider hasPermissionsProvider,
|
||||
SubscriptionPlanProvider subscriptionPlanProvider) {
|
||||
this(mailServiceTracker, corsFilterConfigurationTracker, userStore, accessControlStore, hasPermissionsProvider,
|
||||
subscriptionPlanProvider, /* sharedAcrossSubdomainsOf */ null, /* baseUrlForCrossDomainStorage */ null);
|
||||
this(mailServiceTracker, corsFilterConfigurationTracker, /* replicationServiceTracker */ null, userStore, accessControlStore,
|
||||
hasPermissionsProvider, subscriptionPlanProvider, /* sharedAcrossSubdomainsOf */ null, /* baseUrlForCrossDomainStorage */ null);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -333,8 +336,8 @@ implements ReplicableSecurityService, ClearStateTestSupport {
|
||||
* be shared as well.
|
||||
*/
|
||||
public SecurityServiceImpl(ServiceTracker<MailService, MailService> mailServiceTracker, ServiceTracker<CORSFilterConfiguration, CORSFilterConfiguration> corsFilterConfigurationTracker,
|
||||
UserStore userStore, AccessControlStore accessControlStore, HasPermissionsProvider hasPermissionsProvider,
|
||||
SubscriptionPlanProvider subscriptionPlanProvider, String sharedAcrossSubdomainsOf, String baseUrlForCrossDomainStorage) {
|
||||
ServiceTracker<ReplicationService, ReplicationService> replicationServiceTracker, UserStore userStore, AccessControlStore accessControlStore,
|
||||
HasPermissionsProvider hasPermissionsProvider, SubscriptionPlanProvider subscriptionPlanProvider, String sharedAcrossSubdomainsOf, String baseUrlForCrossDomainStorage) {
|
||||
initialLoadClassLoaderRegistry.addClassLoader(getClass().getClassLoader());
|
||||
if (hasPermissionsProvider == null) {
|
||||
throw new IllegalArgumentException("No HasPermissionsProvider defined");
|
||||
@@ -350,6 +353,7 @@ implements ReplicableSecurityService, ClearStateTestSupport {
|
||||
this.accessControlStore = accessControlStore;
|
||||
this.mailServiceTracker = mailServiceTracker;
|
||||
this.corsFilterConfigurationTracker = corsFilterConfigurationTracker;
|
||||
this.replicationServiceTracker = replicationServiceTracker;
|
||||
this.hasPermissionsProvider = hasPermissionsProvider;
|
||||
this.cacheManager = loadReplicationCacheManagerContents();
|
||||
this.corsFilterConfigurationsByReplicaSetName = loadCORSFilterConfigurations();
|
||||
@@ -540,6 +544,10 @@ implements ReplicableSecurityService, ClearStateTestSupport {
|
||||
private CORSFilterConfiguration getCORSFilterConfiguration() {
|
||||
return corsFilterConfigurationTracker == null ? null : corsFilterConfigurationTracker.getService();
|
||||
}
|
||||
|
||||
private ReplicationService getReplicationService() {
|
||||
return replicationServiceTracker == null ? null : replicationServiceTracker.getService();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendMail(String username, String subject, String body) throws MailException {
|
||||
@@ -1328,7 +1336,15 @@ implements ReplicableSecurityService, ClearStateTestSupport {
|
||||
|
||||
@Override
|
||||
public LockingAndBanning failedBearerTokenAuthentication(String clientIP) {
|
||||
return apply(s->s.internalFailedBearerTokenAuthentication(clientIP));
|
||||
final LockingAndBanning result;
|
||||
final ReplicationService replicationService = getReplicationService();
|
||||
if (replicationService == null || !replicationService.isReplicationStarting()) {
|
||||
result = apply(s->s.internalFailedBearerTokenAuthentication(clientIP));
|
||||
} else {
|
||||
logger.warning("Replication is starting, so not recording failed bearer token authentication for client IP "+clientIP);
|
||||
result = null;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user