Skip to main content
CoreSDK
Getting Started

Java

Instrument a Spring Boot service with CoreSDK in under 30 minutes.

Phase 2 — not yet available. The Java SDK ships in Phase 2. The code below reflects the planned API and the package is not yet published.

Prerequisites

  • Java 17+
  • Maven 3.8+ or Gradle 7+
  • A running CoreSDK Sidecar (see Deployment)

Installation

<dependency>
  <groupId>io.coresdk</groupId>
  <artifactId>coresdk-java</artifactId>
  <version>0.1.0</version>
</dependency>
implementation 'io.coresdk:coresdk-java:0.1.0'

Initialize the SDK

import io.coresdk.CoreSDK;
import io.coresdk.config.CoreSDKConfig;

@Configuration
public class CoreSDKConfiguration {

    @Bean
    public CoreSDK coreSDK() {
        return CoreSDK.builder()  // Phase 2 — Java SDK planned API
            .sidecarAddress("localhost:7233")
            .tenantId(System.getenv("CORESDK_TENANT_ID"))
            .build();
    }
}

Add Middleware

CoreSDK provides a Spring Boot filter that automatically handles JWT validation and attaches user context to every request.

import io.coresdk.spring.CoreSDKFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FilterConfig {

    @Bean
    public FilterRegistrationBean<CoreSDKFilter> coreSdkFilter(CoreSDK sdk) {
        FilterRegistrationBean<CoreSDKFilter> registration = new FilterRegistrationBean<>();
        registration.setFilter(new CoreSDKFilter(sdk));
        registration.addUrlPatterns("/api/*");
        registration.setOrder(1);
        return registration;
    }
}

Extract User Context

import io.coresdk.context.UserContext;
import io.coresdk.context.CoreSDKContext;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

@RestController
public class ProfileController {

    @GetMapping("/api/profile")
    public Map<String, Object> profile() {
        UserContext user = CoreSDKContext.current();
        return Map.of(
            "sub",    user.subject(),
            "tenant", user.tenantId(),
            "roles",  user.roles()
        );
    }
}

Error Handling

import io.coresdk.exception.AuthException;
import io.coresdk.exception.PolicyException;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.util.Map;

@RestControllerAdvice
public class CoreSDKExceptionHandler {

    @ExceptionHandler(AuthException.class)
    @ResponseStatus(HttpStatus.UNAUTHORIZED)
    public Map<String, String> handleAuth(AuthException ex) {
        return Map.of("error", ex.getCode(), "detail", ex.getMessage());
    }

    @ExceptionHandler(PolicyException.class)
    @ResponseStatus(HttpStatus.FORBIDDEN)
    public Map<String, String> handlePolicy(PolicyException ex) {
        return Map.of("error", ex.getCode(), "detail", ex.getMessage());
    }
}

Run Locally

CORESDK_TENANT_ID=dev ./mvnw spring-boot:run

Visit http://localhost:8080/api/profile with a valid JWT in the Authorization header.

Next Steps

On this page