views:

109

answers:

1

Hi,

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.

A: 

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

SecurityContextHolder API

Gandalf
Thanks for your tip about simple bean. But I found more convenient solution for me - I added to my security context following code:<beans:bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean" p:targetClass="org.springframework.security.core.context.SecurityContextHolder" p:targetMethod="setStrategyName" p:arguments="MODE_INHERITABLETHREADLOCAL"/>
viator