0

我正在使用一些基本的 Java 代码通过 Jersey 发送一个 RESTful 请求,出于某种原因,Jersey 将 :443 端口附加到我所有 URL 的末尾,这导致 CAS 失败(代理票证是在其他地方为特定 URL 生成的;添加端口打破了这一点)。

有没有办法告诉 Jersey 不要将 443 端口作为 URL 的一部分发送?

编辑:仅供参考,在意识到问题确实在泽西岛内部之前,我删除了我以前的票。

Edit2:在下面添加了代码;我不得不去掉一些项目,但这基本上是我正在使用的。它是使用我们正在使用的特定 API 的通用方法;我添加了 doNotSend 模式的东西来测试 url;url 从没有 :443 的情况下返回,但是当它通过 Jersey 执行时,它添加了 :443 ,这会关闭 CAS 身份验证。

// Create a trust manager that does not validate certificate chains
TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager(){
    public X509Certificate[] getAcceptedIssuers(){return null;}
    public void checkClientTrusted(X509Certificate[] certs, String authType){}
    public void checkServerTrusted(X509Certificate[] certs, String authType){}
}};
try {
    SSLContext sc = SSLContext.getInstance("TLS");
    sc.init(null, trustAllCerts, new SecureRandom());
    HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
} catch (Exception e) {
    ;
}

Client client = Client.create();

String url = Configuration.getOption(CONFIG_REST_URL) + actionPath;
if (dontSendMode) {
    GGResponse r = new GGResponse();
    r.setUrl(url);
    return r;
}
if (StringUtils.isNotEmpty(proxy_ticket)) {
    if (url.contains("?")) {
        url += "&";
    } else {
        url += "?";
    }
    url += String.format("ticket=%s", proxy_ticket);
}
WebResource.Builder resourceBuilder = client
        .resource(url)
        .accept("application/json");

ClientResponse response = null;
if (method.equalsIgnoreCase("GET")) {
    response = resourceBuilder.get(ClientResponse.class);
}
if (method.equalsIgnoreCase("POST")) {
    response = resourceBuilder.post(ClientResponse.class, json);
}
if (method.equalsIgnoreCase("DELETE")) {
    response = resourceBuilder.delete(ClientResponse.class);
}
if (method.equalsIgnoreCase("PUT")) {
    response = resourceBuilder.put(ClientResponse.class, json);
}

String output = null;
String etagResponse = null;
String error = null;

if (response != null && response.getStatus() == 200) {
    output = response.getEntity(String.class);
} else {
    System.out.println(error);
}
4

0 回答 0