요약
로그인 요청이 오면 필터가 가로채서 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 해주는 방식이 좀 더 편하다.
'programming study > B-Spring Security' 카테고리의 다른 글
오류 해결 - 순환참조 The dependencies of some of the beans in the application context form a cycle (0) | 2023.05.02 |
---|---|
spring security와 OAuth2 (0) | 2023.01.14 |
스프링 시큐리티 사용 이유 (0) | 2023.01.13 |
spring security config 설정할 때 WebSecurityConfigurerAdapter 가 Deprecated 된다. 해결법 (0) | 2023.01.09 |
Spring Security 사용하기 (0) | 2022.12.27 |