programming study/B-Spring Security

Spring Security 로그인 동작 흐름

gu9gu 2022. 12. 29. 17:44

요약

 로그인 요청이 오면 필터가 가로채서 username,password를 확인하여 세션에  있는 SecurityContextHolder 안에 있는 SecurityContext에 Authentication 객체( user 오브젝트 역할) 를 저장한다. Authentication객체는 AuthenticationManager가 만들어준다.

 

자세한 과정

 - username,password를 가지고 로그인 요청이 왔을 때 AuthenticationFilter가 가로채서 usernamePasswordAuthenticationToken을 만들어준다.

 - AuthenticationManager이 usernamePasswordAuthenticationToken을 받아서 Authentication ( session )을 만든다.

    └ AuthenticationManager이 username만 UserDetailsService에 던져서 UserDetailsService는DB에 username이 있는지 확인한다. 있다고 AuthenticationManager까지 응답이 오면 AuthenticationManager는 password를 설정해놓은 암호화방식으로 암호화해서 DB에암호화한 password로 비교하여 맞으면 Authentication ( session )을 만든다.

 

tip

회원 정보 수정시 session에 수정한 정보를 user정보를 반영해야 하는데, 위 로그인 방식을 사용할 수 있다.

변경하려는 정보를 이용해서 authentication을 만들고 session의 SecurityContextHolder의 Context에 넣어주는 방식이다.

그런데, 이 방식보다는 컨트롤러에서 @AuthenticationPrincipal PrincipalDetail principalDetail을 받아 service단으로 넘겨서 setUser 해주는 방식이 좀 더 편하다.