MultiTenantUtil.java
package com.tradecloud.authentication;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken;
import java.util.HashMap;
import java.util.Map;
public final class MultiTenantUtil {
private static Client client;
private static final Map<String, String> urlHost = new HashMap<>();
private MultiTenantUtil() {
}
/**
* Get the active client ID (used to determine the datasource among other things).
*/
public static String getActiveClient() {
if (SecurityContextHolder.getContext().getAuthentication() != null) {
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
if (principal instanceof User) {
return ((User) principal).getActiveClient();
}
if (principal instanceof CustomOAuth2User) {
return ((CustomOAuth2User) principal).getUser().getActiveClient();
} else {
return null;
}
}
return null;
}
/**
* Get the active logged-in user.
*/
public static User getActiveUser() {
if (SecurityContextHolder.getContext().getAuthentication() != null) {
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
if (principal instanceof User) {
return (User) principal;
}
if (principal instanceof CustomOAuth2User) {
return ((CustomOAuth2User) principal).getUser();
} else {
return null;
}
}
return null;
}
public static boolean isOAuthActiveUser() {
if (SecurityContextHolder.getContext().getAuthentication() != null) {
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
return principal instanceof CustomOAuth2User;
}
return false;
}
/**
* Set the active logged-in user.
*/
public static void setActiveUser(User principal, Client client) {
UsernamePasswordAuthenticationToken authentication =
new UsernamePasswordAuthenticationToken(principal, principal.getPassword(), principal.getAuthorities());
SecurityContextHolder.getContext().setAuthentication(authentication);
}
public static void setActiveUser2(CustomOAuth2User principal, String clientId) {
OAuth2AuthenticationToken authentication =
new OAuth2AuthenticationToken(principal, principal.getAuthorities(), clientId);
SecurityContextHolder.getContext().setAuthentication(authentication);
}
public static void clearActiveUser() {
SecurityContextHolder.getContext().setAuthentication(null);
}
public static Client getClient() {
return new Client(getActiveUser().getActiveClient());
}
public static String getUrlHost(String client) {
return urlHost.get(client);
}
public static void setUrlHost(String client, String urlHost) {
MultiTenantUtil.urlHost.put(client, urlHost);
}
}