1

비동기 지원과 함께 Spring 3.2 사용. 보안 컨텍스트가 존재하지 않기 때문에 보안 컨텍스트가 익명 Callable 방법비동기 지원이있는 SecurityContext - Servlet 3에서 Authentication 객체를 찾을 수 없습니다.

@RequestMapping(value = "/home", method = RequestMethod.GET) 
public Callable<String> home(final Model model) { 
    return new Callable<String>() { 
     @Override 
     public String call() throws Exception { 
      model.addAttribute("homeService", homeService.findId(1)); 
      return "home"; 
     } 
    }; 
} 

내부에 한 번 손실이 오류는 servlet-context.xml

<beans:bean id="homeService" class="example.service.HomeServiceImpl" scope="request"> 
    <security:intercept-methods> 
     <security:protect access="ROLE_USER" method="find*"/> 
    </security:intercept-methods> 
</beans:bean> 

이 내부 빈에 적용되는 보안 장식입니다 : org.springframework.security.authentication.AuthenticationCredentialsNotFoundException: An Authentication object was not found in the SecurityContext

답변

0

업그레이드 Spring Security 3.2.0 RC1에 솔루션이었다.

This article은 스프링 시큐리티 3.2은 서블릿 3 비동기 지원과 호환되는 언급하고있다. 호출 가능의
더 기술적으로 말하면, 봄 보안에 SecurityContext에 연관

는 WebAsyncManager와 통합됩니다. Callable를 처리하는 데 사용되는 SecurityContext에 는 가 startCallableProcessing가 호출되는 시점에 SecurityContextHolder에 존재하는 SecurityContext에 있습니다.

메이븐 의존성 :

<dependencies> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-web</artifactId> 
     <version>3.2.0.RC1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-config</artifactId> 
     <version>3.2.0.RC1</version> 
    </dependency> 
</dependencies> 

<repositories> 
    <repository> 
     <id>spring-milestones</id> 
     <name>Spring Milestones</name> 
     <url>http://repo.spring.io/milestone</url> 
     <snapshots> 
      <enabled>false</enabled> 
     </snapshots> 
    </repository> 
</repositories> 
<repositories> 
    <repository> 
     <id>spring-milestones</id> 
     <name>Spring Milestones</name> 
     <url>http://repo.spring.io/milestone</url> 
     <snapshots> 
      <enabled>false</enabled> 
     </snapshots> 
    </repository> 
</repositories>