CurrentTenantResolver.java

package com.tradecloud.repository.multitenant;

import com.tradecloud.authentication.CustomOAuth2User;
import com.tradecloud.authentication.User;
import org.hibernate.context.spi.CurrentTenantIdentifierResolver;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;

public class CurrentTenantResolver implements CurrentTenantIdentifierResolver {

    @Override
    public String resolveCurrentTenantIdentifier() {
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        String database = "tradecloud_default";
        if (authentication != null && authentication.getPrincipal() instanceof User && ((User) authentication.getPrincipal()).getUsername() != null
                && ((User) authentication.getPrincipal()).getActiveClient() != null) {
            User user = (User) authentication.getPrincipal();
            database = "tradecloud_" + user.getActiveClient();
        }
        if (authentication != null && authentication.getPrincipal() instanceof CustomOAuth2User
                && ( ((CustomOAuth2User) authentication.getPrincipal()).getUser()).getUsername() != null
                && (((CustomOAuth2User) authentication.getPrincipal()).getUser()).getActiveClient() != null) {
            User user = ((CustomOAuth2User) authentication.getPrincipal()).getUser();
            database = "tradecloud_" + user.getActiveClient();
        }
        return database;
    }

    @Override
    public boolean validateExistingCurrentSessions() {
        return true;
    }
}