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:runVisit http://localhost:8080/api/profile with a valid JWT in the Authorization header.
Next Steps
- JWT Authentication — configure token validation
- Rego Policies — write authorization rules
- OpenTelemetry — export traces and metrics
- Multi-Tenancy — isolate tenant data