Add virtual-thread, structured-concurrency demos for the Spring Security context propagation guide
Three verified programs (JDK 25, Spring Security 7.1.1, Spring Boot 4.1.1 dependency versions) backing the ankurm.com post: InheritableThreadLocal across thread models, @Async on a virtual-thread SimpleAsyncTaskExecutor (DelegatingSecurityContextExecutor vs ContextPropagatingTaskDecorator), and StructuredTaskScope.fork() propagation. Captured console output and docs chapters included.
This commit is contained in:
5
docs/output/demo1.txt
Normal file
5
docs/output/demo1.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
=== Demo 1: InheritableThreadLocal across thread models ===
|
||||
fresh platform thread sees: request-A
|
||||
pool thread, task 1, sees: request-B
|
||||
pool thread, task 2 (reused), sees: request-B <-- stale, not request-C
|
||||
fresh virtual thread sees: request-D
|
||||
6
docs/output/demo2.txt
Normal file
6
docs/output/demo2.txt
Normal file
@@ -0,0 +1,6 @@
|
||||
=== Demo 2: @Async-style virtual thread executor + SecurityContext ===
|
||||
A) MODE_THREADLOCAL, raw SimpleAsyncTaskExecutor(virtual): NO AUTHENTICATION (lost) [VirtualThread[#23,vt-1]/runnable@ForkJoinPool-1-worker-1]
|
||||
B) MODE_INHERITABLETHREADLOCAL, raw SimpleAsyncTaskExecutor(virtual): authenticated as bob [VirtualThread[#26,vt-1]/runnable@ForkJoinPool-1-worker-1]
|
||||
C) DelegatingSecurityContextExecutor around SimpleAsyncTaskExecutor(virtual): authenticated as carol [VirtualThread[#27,vt-1]/runnable@ForkJoinPool-1-worker-1]
|
||||
SecurityContextHolderThreadLocalAccessor present: true
|
||||
D) ContextPropagatingTaskDecorator on SimpleAsyncTaskExecutor(virtual), no Delegating* wrapper: authenticated as dave [VirtualThread[#28,vt-1]/runnable@ForkJoinPool-1-worker-1]
|
||||
5
docs/output/demo3.txt
Normal file
5
docs/output/demo3.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
=== Demo 3: StructuredTaskScope.fork() + SecurityContext ===
|
||||
A) plain fork, MODE_THREADLOCAL: NO AUTHENTICATION (lost)
|
||||
B) plain fork, MODE_INHERITABLETHREADLOCAL: authenticated as frank
|
||||
C) manual capture/restore: authenticated as grace
|
||||
D) ContextSnapshot.wrap: authenticated as heidi
|
||||
Reference in New Issue
Block a user