-
CSR
-
Resolution: Approved
-
P3
-
None
-
behavioral
-
low
-
`Subject.current()` and `Subject.getSubject(AccessController.getContext())` would return null if called inside a virtual thread. Virtual Threads is still in preview mode and should not be widely used yet.
-
Java API
-
SE
Summary
Remove the paragraph about thread inheritance from the specification of the Subject::current
method.
Problem
According to JEP 425, virtual threads do not work with SecurityManager
and do not inherit the AccessControlContext
of the parent thread. This is currently documented in the class description of the java.lang.Thread
API as follows:
Creating a platform thread captures the caller context to limit the
permissions of the new thread when it executes code that performs a
privileged action. The captured caller context is the new thread's "Inherited
AccessControlContext". Creating a virtual thread does not capture the caller
context; virtual threads have no permissions when executing code that
performs a privileged action.
Currently Subject.current()
is identical to Subject.getSubject(AccessController.getContext())
. This means the current subject is not always inherited when a new thread is created.
Solution
See spec below.
Remove the requirement so that we can reconsider thread inheritance of the current subject when the SecurityManager
and AccessControlContext
APIs are removed or become less functional in a future release and Subject::current
is implemented with a different mechanism other than AccessControlContext
.
No change is made to either Subject::getSubject
or AccessController::getContext
. These are methods that are deprecated for removal. Applications depending on Subject::getSubject
and Subject::doAs
will eventually need to transition to Subject::current
and Subject::callAs
before they are removed or become less functional.
No code change is needed for this CSR.
Specification
For javax.security.auth.Subject
:
/**
* Returns the current subject.
* ....
- * When a new thread is created, its current subject is the same as
- * the one of its parent thread, and will not change even if
- * its parent thread's current subject is changed to another value.
* ....
*/
public static Subject current()
- csr of
-
JDK-8297276 Remove thread text from Subject.current
-
- Resolved
-