[SPRING] 16 : Spring Security 2

김승수·2024년 6월 14일
0

SPRING

목록 보기
16/27

⏰ 2024. 06. 14 금

✔ 스프링 이론 강의를 듣고 정리하면서 작성했습니다.

💡 목차

  1. 로그인 처리 과정 이해
  2. Spring Security 로그인 처리 과정 이해
  3. @AuthenticationPrincipal

Spring Security : 로그인

로그인 처리 과정 이해

  • Spring Security 사용 전

  • Spring Security 사용 후

  • Spring Security를 사용하면, Client의 요청은 모두 Spring Security를 거치게 된다.

  • Spring Security 역할

    • 인증 및 인가
      • 성공 : Controller 로 Client 요청 전달 [Client 요청 + 사용자 정보 (UserDetails)]
      • 실패 : Controller 로 Client 요청 전달되지 않음 [Client 에게 Error Response 보냄]

Spring Security 로그인 처리 과정 이해

  1. 사용자 (Client)

    • 로그인 시도할 usernamepassword 정보를 HTTP body로 전달(POST 요청)
    • 로그인 시도 URL은 SecurityConfig 클래스를 생성하여 변경 가능
  2. 인증 관리자 (Authentication Manager)

    • UserDetailsService 에게 username 을 전달하고 회원상세 정보를 요청
  3. UserDetailsService

    • User DB에서 username를 사용하여 User 조회
    • 조회된 User 정보를 UserDetails로 변환
    • UserDetails를 인증 관리자(Authentication Manager)에게 전달
  4. 인증 관리자 (Authentication Manager)

    • 인증 관리자가 인증 처리
    • 아래 두 개의 username과 password 일치 여부 확인
      • Client가 로그인 시도한 username, password
      • UserDetailsService가 전달해준 UserDetails의 username, password
    • Password 비교 시
      • Client가 보낸 평문 password을 암호화하여, UserDetails의 암호문 password과 비교
    • 인증 성공 시 로그인 정보 저장
    • 인증 실패 시 Error 발생

@AuthenticationPrincipal

  • Authentication의 Principal에 저장된 UserDetailsImpl 객체를 가져올 수 있다.
  • UserDetailsImpl에 저장된 인증된 사용자인 User 객체를 사용할 수 있다.

EX) @AuthenticationPrincipal 사용해서 Home 페이지에 사용자 이름(username) 반영하기

@Controller
public class HomeController {

@GetMapping("/")
public String home(Model model, @AuthenticationPrincipal UserDetailsImpl userDetails) {

	// 페이지 동적 처리 : 사용자 이름
	model.addAttribute("username", userDetails.getUser().getUsername());
	return "index";
    
	}
}
profile
개발하는 미어캣

0개의 댓글