UsernamePasewordAuthenticationToken 객체를 생성할 때 SecurityContextHolder에 있는 authentication과 principal과 credentials(있다면) authorities이 일치하다면 생성된 객체는 자동으로 인증된 객체가 된다. 나는 객체를 생성하면 따로 인증을 받아야 하는줄 알았다.
SecurityContextHolder.getContext().getAuthentication();
현제 쓰레드의 가장 마지막으로 인증에 성공한, 즉 마지막으로 SecurityContextHolder에 들어간 authentication 객체를 반환한다.
쓰레드가 바뀌면 모드를 바꿔서 get하면 authentication을 불러오는게 가능하다고는 한다.
다음은 세팅별 securitycontext의 갯수이다.
MODE_THREADLOCAL: 스레드당 SecurityContext 객체를 할당, 기본값
자식 쓰레드와는 공유가 되지 않는다. 공유를 하려면 아래 모드로 변환을 해야한다.
MODE_INHERITABLETHREADLOCAL: 메인 스레드와 자식 스레드에 관하여 동일한 SecurityContext를 유지
MODE_GLOBAL: 응용 프로그램에서 단 하나의 SecurityContext를 저장한다.
내일 프로젝트에서 할 일: refresh토큰의 값을 임시로 헤더에 담아서 보내고 받는중이다. redis를 통해 refresh토큰을 저장하고 사용하게 만들 예정이다.