提交 0f6f7e79 编写于 作者: A alitvinov

8032832: Applet/browser deadlocks, when IIS integrated authentication is used

Reviewed-by: chegar, weijun
上级 86ae0e97
/* /*
* Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2005, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
...@@ -31,6 +31,7 @@ import java.net.Authenticator.RequestorType; ...@@ -31,6 +31,7 @@ import java.net.Authenticator.RequestorType;
import java.util.Base64; import java.util.Base64;
import java.util.HashMap; import java.util.HashMap;
import sun.net.www.HeaderParser; import sun.net.www.HeaderParser;
import sun.util.logging.PlatformLogger;
import static sun.net.www.protocol.http.AuthScheme.NEGOTIATE; import static sun.net.www.protocol.http.AuthScheme.NEGOTIATE;
import static sun.net.www.protocol.http.AuthScheme.KERBEROS; import static sun.net.www.protocol.http.AuthScheme.KERBEROS;
...@@ -44,6 +45,7 @@ import static sun.net.www.protocol.http.AuthScheme.KERBEROS; ...@@ -44,6 +45,7 @@ import static sun.net.www.protocol.http.AuthScheme.KERBEROS;
class NegotiateAuthentication extends AuthenticationInfo { class NegotiateAuthentication extends AuthenticationInfo {
private static final long serialVersionUID = 100L; private static final long serialVersionUID = 100L;
private static final PlatformLogger logger = HttpURLConnection.getHttpLogger();
final private HttpCallerInfo hci; final private HttpCallerInfo hci;
...@@ -78,6 +80,31 @@ class NegotiateAuthentication extends AuthenticationInfo { ...@@ -78,6 +80,31 @@ class NegotiateAuthentication extends AuthenticationInfo {
return false; return false;
} }
/**
* Find out if the HttpCallerInfo supports Negotiate protocol.
* @return true if supported
*/
public static boolean isSupported(HttpCallerInfo hci) {
ClassLoader loader = null;
try {
loader = Thread.currentThread().getContextClassLoader();
} catch (SecurityException se) {
if (logger.isLoggable(PlatformLogger.Level.FINER)) {
logger.finer("NegotiateAuthentication: " +
"Attempt to get the context class loader failed - " + se);
}
}
if (loader != null) {
// Lock on the class loader instance to avoid the deadlock engaging
// the lock in "ClassLoader.loadClass(String, boolean)" method.
synchronized (loader) {
return isSupportedImpl(hci);
}
}
return isSupportedImpl(hci);
}
/** /**
* Find out if the HttpCallerInfo supports Negotiate protocol. In order to * Find out if the HttpCallerInfo supports Negotiate protocol. In order to
* find out yes or no, an initialization of a Negotiator object against it * find out yes or no, an initialization of a Negotiator object against it
...@@ -89,7 +116,7 @@ class NegotiateAuthentication extends AuthenticationInfo { ...@@ -89,7 +116,7 @@ class NegotiateAuthentication extends AuthenticationInfo {
* *
* @return true if supported * @return true if supported
*/ */
synchronized public static boolean isSupported(HttpCallerInfo hci) { private static synchronized boolean isSupportedImpl(HttpCallerInfo hci) {
if (supported == null) { if (supported == null) {
supported = new HashMap <String, Boolean>(); supported = new HashMap <String, Boolean>();
cache = new HashMap <String, Negotiator>(); cache = new HashMap <String, Negotiator>();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册