1 package org
.argeo
.cms
.internal
.http
.client
;
3 import java
.net
.MalformedURLException
;
5 import java
.net
.http
.HttpClient
;
6 import java
.net
.http
.HttpRequest
;
7 import java
.net
.http
.HttpResponse
;
8 import java
.net
.http
.HttpResponse
.BodyHandler
;
9 import java
.net
.http
.HttpResponse
.BodyHandlers
;
10 import java
.security
.KeyManagementException
;
11 import java
.security
.NoSuchAlgorithmException
;
12 import java
.security
.cert
.X509Certificate
;
14 import javax
.net
.ssl
.SSLContext
;
15 import javax
.net
.ssl
.TrustManager
;
16 import javax
.net
.ssl
.X509TrustManager
;
17 import javax
.security
.auth
.Subject
;
18 import javax
.security
.auth
.login
.LoginContext
;
20 import org
.argeo
.cms
.auth
.RemoteAuthUtils
;
22 public class SpnegoHttpClient
{
23 public static void main(String
[] args
) throws MalformedURLException
{
24 String principal
= System
.getProperty("javax.security.auth.login.name");
25 if (args
.length
== 0 || principal
== null) {
26 System
.err
.println("usage: java -Djavax.security.auth.login.name=<principal@REALM> "
27 + SpnegoHttpClient
.class.getName() + " <url>");
33 String server
= u
.getHost();
35 URL jaasUrl
= SpnegoAuthScheme
.class.getResource("jaas.cfg");
36 System
.setProperty("java.security.auth.login.config", jaasUrl
.toExternalForm());
38 LoginContext lc
= new LoginContext("SINGLE_USER");
41 // int responseCode = Subject.doAs(lc.getSubject(), new PrivilegedExceptionAction<Integer>() {
43 // public Integer run() throws Exception {
45 // InputStream ins = u.openConnection().getInputStream();
46 // BufferedReader reader = new BufferedReader(new InputStreamReader(ins));
48 // while ((str = reader.readLine()) != null)
49 // System.out.println(str);
52 HttpClient httpClient
= openHttpClient(lc
.getSubject());
53 String token
= RemoteAuthUtils
.getGssToken(lc
.getSubject(), "HTTP", server
);
55 HttpRequest request
= HttpRequest
.newBuilder().uri(u
.toURI()) //
56 .header("Authorization", "Negotiate " + token
) //
58 BodyHandler
<String
> bodyHandler
= BodyHandlers
.ofString();
59 HttpResponse
<String
> response
= httpClient
.send(request
, bodyHandler
);
60 System
.out
.println(response
.body());
61 int responseCode
= response
.statusCode();
62 // return response.statusCode();
65 System
.out
.println("Reponse code: " + responseCode
);
66 } catch (Exception e
) {
71 private static HttpClient
openHttpClient(Subject subject
) {
72 HttpClient client
= HttpClient
.newBuilder() //
73 // .sslContext(insecureContext()) //
74 .version(HttpClient
.Version
.HTTP_1_1
) //
80 static SSLContext
insecureContext() {
81 TrustManager
[] noopTrustManager
= new TrustManager
[] { new X509TrustManager() {
82 public void checkClientTrusted(X509Certificate
[] xcs
, String string
) {
85 public void checkServerTrusted(X509Certificate
[] xcs
, String string
) {
88 public X509Certificate
[] getAcceptedIssuers() {
93 SSLContext sc
= SSLContext
.getInstance("ssl");
94 sc
.init(null, noopTrustManager
, null);
96 } catch (KeyManagementException
| NoSuchAlgorithmException e
) {
97 throw new IllegalStateException("Cannot create insecure SSL context ", e
);