복붙노트

[SPRING] 스프링 보안 SecurityContextHolder 전략을 설정하는 방법은 무엇입니까?

SPRING

스프링 보안 SecurityContextHolder 전략을 설정하는 방법은 무엇입니까?

내 서비스에서 비동기 메서드를 사용하고있다 (Spring 3 @Async annotation). 그리고 문제가 생겼습니다. 스폰 된 스레드에는 보안 컨텍스트가 없습니다. 왜냐하면 스프링 보안은 기본적으로 컨텍스트 홀더에 대해 SecurityContextHolder.MODE_THREADLOCAL 전략을 사용합니다. 하지만 SecurityContextHolder.MODE_INHERITABLETHREADLOCAL 전략을 사용해야합니다. 잠시 동안 나는 AuthenticationSuccessHandler에 전략을 세웠다. 그러나 제 관점에서는 좋은 습관이 아닙니다.

그렇다면 컨텍스트 구성 파일에서 어떻게 설정할 수 있습니까? 스프링 보안 버전은 3.0.0입니다.

해결법

  1. ==============================

    1.환경 변수 spring.security.strategy를 MODE_INHERITABLETHREADLOCAL로 설정할 수 있습니다. 웹 응용 프로그램을 시작할 때 SecurityContextHolder.setStrategyName (SecurityContextHolder.MODE_INHERITABLETHREADLOCAL)을 호출하고 컨텍스트 구성 파일에서 해당 값을 초기화하는 간단한 bean을 가질 수도 있습니다.

    환경 변수 spring.security.strategy를 MODE_INHERITABLETHREADLOCAL로 설정할 수 있습니다. 웹 응용 프로그램을 시작할 때 SecurityContextHolder.setStrategyName (SecurityContextHolder.MODE_INHERITABLETHREADLOCAL)을 호출하고 컨텍스트 구성 파일에서 해당 값을 초기화하는 간단한 bean을 가질 수도 있습니다.

    SecurityContextHolder API

  2. ==============================

    2.그것이 당신을 돕는다면 @viator의 대답을위한 자바 설정.

    그것이 당신을 돕는다면 @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;
    }
    
  3. ==============================

    3.@viator 쓰기와 같은 또 하나의 해결책 :

    @viator 쓰기와 같은 또 하나의 해결책 :

    <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>
    

    매력처럼 일하고.

  4. from https://stackoverflow.com/questions/3467918/how-to-set-up-spring-security-securitycontextholder-strategy by cc-by-sa and MIT license