How to set up Spring Security SecurityContextHolder strategy?

spring, spring-security

Solution

You can set the environment variable `spring.security.strategy` to `MODE_INHERITABLETHREADLOCAL`. You could also have a simple bean that during your web applications startup calls `SecurityContextHolder.setStrategyName(SecurityContextHolder.MODE_INHERITABLETHREADLOCAL)` and initialize that value in your context configuration file.

SecurityContextHolder API

Problem

I'm using asynchronous methods in my service (Spring 3 `@Async` annotation). And I've got a problem - spawned thread doesn't have security context. Cause of it is Spring Security by default uses `SecurityContextHolder.MODE_THREADLOCAL` strategy for its context holder. But I need to use `SecurityContextHolder.MODE_INHERITABLETHREADLOCAL` strategy. For the moment I set up strategy in my AuthenticationSuccessHandler. But in my point of view it's not a good practice. So how can I set it up in context configuration file? Version of spring security is 3.0.0.

Original source

Related problems