Как настроить стратегию Spring Security SecurityContextHolder? - PullRequest
30 голосов
/ 12 августа 2010

Я использую в своем сервисе асинхронные методы (аннотация Spring 3 @Async).И у меня проблема - порожденная нить не имеет контекста безопасности.Причиной этого является то, что Spring Security по умолчанию использует стратегию SecurityContextHolder.MODE_THREADLOCAL для своего держателя контекста.Но мне нужно использовать стратегию SecurityContextHolder.MODE_INHERITABLETHREADLOCAL.На данный момент я настроил стратегию в моем AuthenticationSuccessHandler .Но, на мой взгляд, это не очень хорошая практика.

Так как я могу установить его в файле конфигурации контекста?
Версия Spring Security 3.0.0.

Ответы [ 3 ]

32 голосов
/ 12 августа 2010

Вы можете установить переменную окружения spring.security.strategy на MODE_INHERITABLETHREADLOCAL. Вы также можете иметь простой bean-компонент, который во время запуска веб-приложений вызывает SecurityContextHolder.setStrategyName(SecurityContextHolder.MODE_INHERITABLETHREADLOCAL) и инициализирует это значение в файле конфигурации контекста.

API SecurityContextHolder

26 голосов
/ 10 августа 2015

Конфигурация java для ответа @viator, если он вам поможет.

@Bean
public MethodInvokingFactoryBean methodInvokingFactoryBean() {
    MethodInvokingFactoryBean methodInvokingFactoryBean = new MethodInvokingFactoryBean();
    methodInvokingFactoryBean.setTargetClass(SecurityContextHolder.class);
    methodInvokingFactoryBean.setTargetMethod("setStrategyName");
    methodInvokingFactoryBean.setArguments(new String[]{SecurityContextHolder.MODE_INHERITABLETHREADLOCAL});
    return methodInvokingFactoryBean;
}
5 голосов
/ 17 января 2017

Немного другое решение, например, @viator write:

<bean
        class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
        <property name="targetClass"
            value="org.springframework.security.core.context.SecurityContextHolder" />
        <property name="targetMethod" value="setStrategyName" />
        <property name="arguments" value="MODE_INHERITABLETHREADLOCAL" />
    </bean>

Работа как шарм.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...