or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

index.mdspring-integration.mdtenant-extraction.mdtenant-management.mdtenant-policies.md
tile.json

tessl/maven-org-apereo-cas--cas-server-core-multitenancy

Apereo CAS Core Multitenancy library providing tenant management capabilities for Central Authentication Service

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
mavenpkg:maven/org.apereo.cas/cas-server-core-multitenancy@7.2.x

To install, run

npx @tessl/cli install tessl/maven-org-apereo-cas--cas-server-core-multitenancy@7.2.0

index.mddocs/

CAS Server Core Multitenancy

CAS Server Core Multitenancy is a Java library that provides comprehensive tenant management capabilities for the Central Authentication Service (CAS). It enables multi-tenant authentication deployments where different organizations or environments can coexist within a single CAS infrastructure while maintaining complete isolation and customization capabilities for each tenant.

Package Information

  • Package Name: cas-server-core-multitenancy
  • Package Type: maven
  • Language: Java
  • Version: 7.2.4
  • Group ID: org.apereo.cas
  • Installation: Add dependency to your Maven/Gradle build file

Maven:

<dependency>
    <groupId>org.apereo.cas</groupId>
    <artifactId>cas-server-core-multitenancy</artifactId>
    <version>7.2.4</version>
</dependency>

Gradle:

implementation 'org.apereo.cas:cas-server-core-multitenancy:7.2.4'

Core Imports

import org.apereo.cas.multitenancy.TenantsManager;
import org.apereo.cas.multitenancy.TenantExtractor;
import org.apereo.cas.multitenancy.TenantDefinition;
import org.apereo.cas.multitenancy.DefaultTenantsManager;
import org.apereo.cas.multitenancy.DefaultTenantExtractor;

Basic Usage

import org.apereo.cas.multitenancy.*;
import org.apereo.cas.configuration.CasConfigurationProperties;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import java.util.Optional;

// Create a tenants manager with JSON configuration
Resource tenantsConfig = new ClassPathResource("tenants.json");
TenantsManager tenantsManager = new DefaultTenantsManager(tenantsConfig);

// Find a specific tenant
Optional<TenantDefinition> tenant = tenantsManager.findTenant("tenant1");
if (tenant.isPresent()) {
    TenantDefinition tenantDef = tenant.get();
    System.out.println("Tenant: " + tenantDef.getId());
    System.out.println("Description: " + tenantDef.getDescription());
}

// Extract tenant from request path (requires CAS configuration)
CasConfigurationProperties casProperties = new CasConfigurationProperties();
TenantExtractor extractor = new DefaultTenantExtractor(tenantsManager, casProperties);
Optional<TenantDefinition> extractedTenant = extractor.extract("/tenants/tenant1/login");

Architecture

The CAS multitenancy module is built around several key components:

  • Tenant Management: Central repository for tenant definitions with JSON-based configuration and dynamic reloading
  • Tenant Extraction: URL pattern matching to identify tenant context from incoming requests
  • Policy Framework: Separate, configurable policies for authentication, communication, delegation, and multifactor authentication per tenant
  • Spring Integration: Full Spring Boot auto-configuration with proper bean lifecycle management
  • Configuration Watching: File system monitoring for dynamic tenant configuration updates

Capabilities

Tenant Management

Core functionality for managing tenant definitions, including loading from JSON configuration files and providing lookup capabilities.

public interface TenantsManager {
    Optional<TenantDefinition> findTenant(String tenantId);
    List<TenantDefinition> findTenants();
}

public class DefaultTenantsManager implements TenantsManager, DisposableBean {
    public DefaultTenantsManager();
    public DefaultTenantsManager(Resource resource);
}

Tenant Management

Tenant Extraction

System for extracting tenant context from HTTP requests using configurable URL patterns and request processing.

public interface TenantExtractor {
    TenantsManager getTenantsManager();
    Optional<TenantDefinition> extract(HttpServletRequest request);
    Optional<TenantDefinition> extract(RequestContext requestContext);
    Optional<TenantDefinition> extract(String requestPath);
    static String tenantIdFromPath(String requestPath);
}

public class DefaultTenantExtractor implements TenantExtractor {
    public DefaultTenantExtractor(TenantsManager tenantsManager, CasConfigurationProperties casProperties);
}

Tenant Extraction

Tenant Definition and Policies

Complete tenant configuration model with separate policy objects for different aspects of authentication and communication.

public class TenantDefinition implements Serializable {
    private String id;
    private String description;
    private TenantAuthenticationPolicy authenticationPolicy;
    private TenantCommunicationPolicy communicationPolicy;
    private TenantDelegatedAuthenticationPolicy delegatedAuthenticationPolicy;
    private TenantMultifactorAuthenticationPolicy multifactorAuthenticationPolicy;
    
    public String getId();
    public void setId(String id);
    public String getDescription();
    public void setDescription(String description);
    public TenantAuthenticationPolicy getAuthenticationPolicy();
    public void setAuthenticationPolicy(TenantAuthenticationPolicy authenticationPolicy);
    public TenantCommunicationPolicy getCommunicationPolicy();
    public void setCommunicationPolicy(TenantCommunicationPolicy communicationPolicy);
    public TenantDelegatedAuthenticationPolicy getDelegatedAuthenticationPolicy();
    public void setDelegatedAuthenticationPolicy(TenantDelegatedAuthenticationPolicy delegatedAuthenticationPolicy);
    public TenantMultifactorAuthenticationPolicy getMultifactorAuthenticationPolicy();
    public void setMultifactorAuthenticationPolicy(TenantMultifactorAuthenticationPolicy multifactorAuthenticationPolicy);
}

Tenant Policies

Spring Configuration

Auto-configuration classes and beans for seamless Spring Boot integration with proper conditional configuration.

@AutoConfiguration
@EnableConfigurationProperties(CasConfigurationProperties.class)
@ConditionalOnFeatureEnabled(feature = CasFeatureModule.FeatureCatalog.Multitenancy)
public class CasCoreMultitenancyAutoConfiguration {
    @Bean
    @RefreshScope(proxyMode = ScopedProxyMode.DEFAULT)
    @ConditionalOnMissingBean(name = TenantsManager.BEAN_NAME)
    public TenantsManager tenantsManager(CasConfigurationProperties casProperties) throws Exception;
    
    @Bean
    @RefreshScope(proxyMode = ScopedProxyMode.DEFAULT)
    @ConditionalOnMissingBean(name = TenantExtractor.BEAN_NAME)
    public TenantExtractor tenantExtractor(CasConfigurationProperties casProperties, 
        @Qualifier(TenantsManager.BEAN_NAME) TenantsManager tenantsManager);
    
    @Bean
    @ConditionalOnMissingBean(name = "casMultitenancyEndpointConfigurer")
    @RefreshScope(proxyMode = ScopedProxyMode.DEFAULT)
    public CasWebSecurityConfigurer<HttpSecurity> casMultitenancyEndpointConfigurer();
}

Spring Integration

Common Types

Core Constants

public interface TenantsManager {
    String BEAN_NAME = "tenantsManager";
}

public interface TenantExtractor {
    String BEAN_NAME = "tenantExtractor";
    Pattern PATTERN_TENANTS = Pattern.compile("tenants/(.+)/(.+)", Pattern.CASE_INSENSITIVE);
}

Exception Types

public class UnknownTenantException extends RuntimeException {
    public UnknownTenantException(String message);
}