본문 바로가기

spring security

폼 인증 - formLogin()

정수원님의 **스프링 시큐리티 완전 정복** 강의 내용 기록입니다 !!

 

 

 

폼 인증
  • HTTP 기반의 폼 로그인 인증 메커니즘을 활성화하는 API
  • 사용자 인증을 위한 사용자 정의 로그인 페이지를 쉽게 구현할 수 있음
  • 기본적으로 스프링 시큐리티가 기본 로그인 페이지 제공 : 사용자 이름 / 비밀번호 필드 포함된 간단한 로그인 양식
  • 사용자는 웹 폼을 통해 자격 증명(사용자 이름/비밀번호)을 제공하고, Spring Security는 HttpServletRequest에서 이 값을 읽어 옴

 

폼 인증 흐름

 

Client

↓  Get  /user

SecurityFilterChain

-----

권한 검사 필터 : AuthorizationFilter

접근 예외 발생 : AccessDeniedException

예외 처리 필터 : ExceptionTranslationFilter

인증 시작 : AuthenticationEntryPoint

로그인 페이지로 리다이렉트

-----

로그인 페이지

인증 시도 : 사용자 자격증명(username + password) submit

Server

 

formLogin() API
  • FormLoginConfigurer 설정 클래스를 통해 여러 API 들을 설정
  • 내부적으로 UsernamePasswordAuthenticationFilter 생성 → 폼 방식의 인증 처리를 담당하게 됨

  • loginPage("/loginPage") : 사용자 정의 로그인페이지로 전환
    • 설정되면 기본 로그인페이지는 무시됨
    • 설정하지 않으면 기본 로그인 페이지는 "/login"
  • loginProcessingUrl("/loginProc") : 사용자 이름과 비밀번호를 검증할 URL 지정
    • HTML 태그 <form action="/loginProc"></form>에서 action 속성값과 동기화되어야 함
    • 설정하지 않으면 기본값은 "/login"
    • 기본 로그인 페이지를 사용하면 내가 지정한 값으로 자동으로 동기화됨
    • 사용자 정의 로그인 페이지를 사용하면 form action 값과 loginProcessingUrl 값이 일치하도록 설정해야 함
  • defaultSuccessUrl("/", [alwaysUse]) : 로그인 성공 이후 이동 페이지, alwaysUse가 true이면 무조건 지정된 위치로 이동
    • alwaysUse 기본값은 false
    • false인 경우) 인증 전에 보안이 필요한 페이지를 방문하다가 인증에 성공한 경우 이전 위치로 리다이렉트
    • true인 경우) 이전 위치와 관계 없이 defaultUrl로 리다이렉트
  • failureUrl("/failed") : 인증에 실패할 경우 사용자에게 보내질 URL 지정
    • 기본값은 "/login?error"

  • usernameParameter("username") : 인증을 수행할 때 사용자 이름(아이디)을 찾기 위해 확인하는 HTTP 매개변수 설정
    • 기본값은 username
    • input  태그 <input name="username">에서 name 속성값과 동기화되어야 함
  • passwordParameter("password") : 인증을 수행할 때 비밀번호를 찾기 위해 확인하는 HTTP 매개변수 설정
    • 기본값은 password
    • input 태그 <input name="password">에서 name 속성값과 동기화되어야 함
  • successHandler(AuthenticationSuccessHandler) : 인증 성공 시 사용할 AuthenticationSuccessHandler 지정
    • 기본값은 SavedRequestAwareAuthenticationSuccessHandler
    • 사용자 정의로 인증 성공 시 할 일을 지정할 수 있음
    • 람다식으로 (request, response, authentication) -> { response.sendRedirect("/home")} 지정 가능
    • 이 handler가 지정되면 defaultSuccessUrl은 alwayUser가 true여도 무시됨 ≫ successHandler가 더 셈 !!
  • failureHandler(AuthenticationFailureHandler) : 인증 실패 시 사용할 AuthenticationFailureHandler 지정
    • 기본값은 SimpleUrlAuthenticationFailureHandler
    • 사용자 정의로 인증 실패 시 할 일을 지정할 수 있음
    • 람다식으로 (request, response, exception) -> { response.sendRedirect("/login")} 지정 가능
    • 이 handler에서 리다이렉트 페이지 주소가 지정되면 failureUrl은 무시됨 ≫ failureHandler 가 더 셈 !!
  • permitAll() : failureUrl(), loginPage(), loginProcessingUrl()에 대한 URL에 모든 사용자의 접근을 허용
    • 로그인 성공 이전, 사용자 인증 이전에 접근해야 하는 URL이기 때문