작성
·
490
1
안녕하세요
SecurityContextHolder.getContext().setAuthentication(authentication);
이게 doFilter에도 있고 로그인할 때도 있는데 이 둘의 차이가 뭔가요??
예를 들어 특정 사용자의 토큰을 프론트에서 넘겨줄 때 토큰에 들어있는 정보를 가져와서 그것을 이용해서 데이터베이스에서 사용자 조회를 사고 그 사용자 정보를 바탕으로 특정작업을 처리할 때
SecurityContextHolder.getContext().getAuthentication().getName(); 이런 식으로 처리하는 것으로 아는데 이렇게 가져오는 건 어디서 저장되어있는 것을 가져오는 건가요?? session방식이 아니기 때문에 서버에 저장하는 것 같지는 않은데요,..
답변 2
1
안녕하세요 답변이 늦어 죄송합니다.
doFilter에서 setAuthentication 하는 부분은 헤더에 토큰이 있는 경우이고,
로그인 요청 시 에는 헤더에 토큰이 없기 때문에 doFilter에서는 해당 부분을 수행하지 않고
setAuthentication 하는 부분은 로그인 생성 후에 토큰을 스레드 내 인증정보의 저장소 역할을 하는 SecurityContextHolder에 저장하고 사용하게 됩니다.
쉽게 풀어서 설명드리자면
Spring으로 요청이 들어왔을때 헤더의 인증정보를 스레드 내 저장소에 담아놓고 해당 스레드에서 필요 시 꺼내서 사용한다고 이해하시면 될 것 같습니다.
0
로그인할 때 setAuthentication 하는 이유가 먼가요?
어차피 세션이 stateless 인데, 로그인은 그냥 토큰만 주면 끝나는 거고, setAuthentication 할 필요가 없지 않나요? 로그인 뒤에 헤더에 토큰 달고 오는 요청은 doFilter 에서 setAuthentication 되니까요
저도 궁금해서 생각해봤는데
프론트쪽이 있을때
만약 시작페이지에 로그인이 있고 그 구역이 비동기로 동작한다면
로그인을 하게되면 "누구누구님 환영합니다" 이러한 문구가 필요한 부분에서 사용되지 않을까요??
로그인 즉시 필요한 곳에서 사용될거 같은데
잘모르지만 답변남겨봅니다..