arunk-kumar opened a new pull request, #1277:
URL: https://github.com/apache/knox/pull/1277

   [KNOX-3338] - A short description of the change
   
   ## Problem
   On JDK 23+, Apache Knox throws `UnsupportedOperationException` at runtime 
   because `Subject.getSubject(AccessController.getContext())` and 
   `Subject.doAs()` were deprecated for removal in JDK 17 (JEP 411) and 
   are now non-functional on JDK 23+.
   
   Stack trace:
     at javax.security.auth.Subject.getSubject(Subject.java:277)
     at 
org.apache.knox.gateway.security.SubjectUtils.getCurrentSubject(SubjectUtils.java:41)
     at 
org.apache.knox.gateway.filter.ShiroSubjectIdentityAdapter$CallableChain.call(...)
   
   ## Solution
   Migrate to the JDK 18+ replacement APIs (`Subject.current()` and 
   `Subject.callAs()`) using cached reflection — resolved once at class-load 
   time via a static initializer — with a graceful fallback to the legacy APIs 
   on JDK 17. This keeps the code compilable on JDK 17 while being 
   correct on JDK 23+.
   
   ## What changes were proposed in this pull request?
   
   ### SubjectUtils.java
   - Replaced `Subject.getSubject(AccessController.getContext())` with 
     a cached reflection lookup for `Subject.current()` (JDK 18+)
   - Static initializer resolves the method once at boot — zero per-request 
     reflection overhead
   - Falls back to `Subject.getSubject()` on JDK 17
   - Catches `NoSuchMethodException | SecurityException` in static block 
     to prevent `ExceptionInInitializerError`
   
   ### ShiroSubjectIdentityAdapter.java
   - Added `SUBJECT_CALL_AS` static field — cached reflection lookup for 
     `Subject.callAs(Subject, Callable)` (JDK 18+)
   - Added `doSubjectAction()` private helper method that routes to 
     `Subject.callAs()` on JDK 18+ or falls back to `Subject.doAs()` on JDK 17
   - Replaced both `Subject.doAs()` call sites (anonymous path and 
     authenticated path) with `doSubjectAction()`
   - Replaced `PrivilegedExceptionAction` anonymous class with `Callable` lambda
   
   ### gateway-provider-security-shiro/pom.xml
   - Added `de.thetaphi:forbiddenapis` compile dependency required for 
     `@SuppressForbidden` annotation on `doSubjectAction()`
   
   ## How was this patch tested?
   
   - Full build compiles cleanly on JDK 17
   - `gateway-provider-security-shiro`: 26 tests run, 0 failures, 0 errors
   - No new test failures introduced by this change
   
   ### Pre-existing failures on master (unrelated to this PR)
   The following 30 test failures exist on master **before** this change 
   and are confirmed by running `git stash` and reproducing the same failures 
   on the unmodified codebase:
   - `DefaultDispatchTest` (4 errors)
   - `BCInterceptingOutputStreamTest` (8 errors)  
   - `SSEDispatchTest` (5 errors)
   - `KnoxImpersonationProviderTest` (13 errors)
   
   Root cause: Mockito/ByteBuddy incompatibility (`Could not create type`) 
   in the local build environment. These failures are not caused by any 
   code change in this PR.
   
   ## JIRA
   https://issues.apache.org/jira/browse/KNOX-3338
   
   ## UI changes
   NA
   
   Please review [Knox Contributing 
Process](https://cwiki.apache.org/confluence/display/KNOX/Contribution+Process#ContributionProcess-GithubWorkflow)
 before opening a pull request.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to