In this article, we will create Java 11 HttpClient that accesses Basic Auth protected REST API resource using sync and async mode. We will use Kotlin for a reference implementation. Spring Boot 2 based Basic Auth Server You can directly download the Basic Auth Server from Github Repository and run it locally using the below command. Starting the server using Gradle
$ ./gradlew bootRun
Server will expose http://localhost:8080/api/health endpoint, which can be tested using the below curl command.
$ curl -i --user admin:password -X GET http://localhost:8080/api/health
Java 11 HttpClient Java 11 HttpClient supports Basic Authentication using authenticator. We can use either send or sendAsync api for making synchronous and asynchronous (fully non-blocking) requests.
fun basicAuthSync() {
val httpClient: HttpClient = HttpClient.newBuilder()
.connectTimeout(Duration.ofSeconds(10))
.authenticator(object : Authenticator() {
override fun getPasswordAuthentication(): PasswordAuthentication {
return PasswordAuthentication("admin", "password".toCharArray())
}
})
.version(HttpClient.Version.HTTP_1_1)
.build()
val request = HttpRequest.newBuilder()
.GET()
.uri(URI.create("http://localhost:8080/api/health"))
.build()
val httpResponse = httpClient.send(request, BodyHandlers.ofString())
println("httpResponse statusCode = ${httpResponse.statusCode()}")
println(httpResponse.body())
}
PasswordAuthentication is configured for handling HTTP Basic Authentication.
httpClient.sendAsync(request, BodyHandlers.ofString())
.thenApply(HttpResponse<String>::body)
.thenAccept(System.out::println)
.join()
Server Response
httpResponse statusCode = 200
{"status":"UP"}
What's new in Spring Boot 2 Spring boot 2 is liberated from legacy baggage of deprecated Java releases. Java 8 is the minimum baseline, with Java 9 support. Under the hood Spring Boot, 2 uses Spring 5. Reactive web programming support with Spring Webflux. Auto-configuration and starter POMs for reactive Spring Data Cassandra, MongoDB, Couchbase and Redis. Supports embedded Netty, along with HTTP/2 support for Tomcat, Undertow, and Jetty Kotlin we supported in Spring Boot 2, along with Junit 5. Now you can write Spring Boot 2 application from scratch in Kotlin. A brand new actuator architecture, with support for Spring MVC, WebFlux and Jersey. Simplified security auto-configuration. Uses Spring Framework 5 under the hood. Gradle 4 required, works well with Gradle 5.
Related blog:
Recommended Posts