로그인 되어 있는 상태에서 다음의 메소드를 Async 방식으로 호출한 후 로그인 사용자의 계정 정보를 추출하면 항상 null 값이 나온다.
@Async
public void searchLog(Search search) {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
String userId = auth.getName();
}
스프링 시큐리티는 사용자 인증 후 ThreadLocal 객체에 값을 저장하기 때문에 @Async 기능으로 인한 새로운 쓰레드에서는 사용자 세션 정보를 가져올 수 없다.
-> spring security 필터를 통과한 쓰레드만 사용자 로그인 정보를 ThreadLocal에 담는다.
'프로그래밍' 카테고리의 다른 글
mybatis multiple select key (2) | 2015.05.21 |
---|---|
iframe사이트와 parent사이트간 메세지 전송 방법 (서로 도메인이 다른 경우) (0) | 2015.05.21 |
HTTP request 요청 시 Content-Type의 중요성 (6) | 2015.03.09 |
@InitBinder를 이용한 사용자 로그인 정보 @ModelAttribute 객체에 저장하기 (0) | 2015.03.04 |
@RequestMapping value에 property values 주입하기 (0) | 2014.12.05 |
Free Java Hotswap DCEVM (3) | 2014.09.01 |
이클립스 에러난 행으로 이동 (단축키) (0) | 2014.08.26 |
스프링 빈 등록 (Java 코드 이용) (0) | 2014.08.13 |