Post

[Spring Security] formLogin

[Spring Security] formLogin

πŸ“Œ formLogin λ©”μ„œλ“œλž€?

formLogin λ©”μ„œλ“œλŠ” 둜그인 폼을 ν†΅ν•œ 인증을 μ‰½κ²Œ κ΅¬ν˜„ν•  수 μžˆλ„λ‘ ν•˜λŠ” κΈ°λŠ₯이닀.

πŸ“Œ formLogin API

loginPage

loginPage λŠ” Spring Securityκ°€ 기본적으둜 μ œκ³΅ν•˜λŠ” 둜그인 폼 λŒ€μ‹  κ°œλ°œμžκ°€ λ§Œλ“  μ»€μŠ€ν…€ 둜그인 폼을 μ‚¬μš©ν•˜λ €κ³  ν•  λ•Œ μ‚¬μš©ν•œλ‹€.

loginProcessingUrl

loginProcessingUrl λ©”μ„œλ“œμ—λŠ” 인증 절차λ₯Ό κ°€λ‘œμ±„μ„œ μˆ˜ν–‰ν•  μ—”λ“œν¬μΈνŠΈλ₯Ό μž‘μ„±ν•œλ‹€. ν•΄λ‹Ή URL둜 자격 증λͺ…이 λ“€μ–΄μ˜€λ©΄ UsernamePasswordAuthenticationFilter κ°€ 이λ₯Ό κ°€λ‘œμ±„μ„œ AuthenticationManager μ—κ²Œ μ „λ‹¬ν•œλ‹€. 이후 UserDetailService κ΅¬ν˜„μ²΄λ₯Ό μ°Ύμ•„ loadUserByUsername λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜κ³ , λ¦¬ν„΄λœ UserDetails 객체의 λΉ„λ°€λ²ˆν˜Έλ₯Ό λΉ„κ΅ν•˜μ—¬ μΌμΉ˜ν•˜λŠ”μ§€ κ²€μ¦ν•œλ‹€. 인증에 μ„±κ³΅ν•˜λ©΄ μ‚¬μš©μž 정보와 κΆŒν•œμ„ λ‹΄μ•„ Authentication 객체λ₯Ό 생성할 ν›„ SecurityContext 에 μ €μž₯ν•œλ‹€.

defaultSuccessUrl

defaultSuccessUrl 은 λ‘œκ·ΈμΈμ— μ„±κ³΅ν–ˆμ„ λ•Œ 이동할 κΈ°λ³Έ URL을 μ§€μ •ν•˜λŠ” λ©”μ„œλ“œμ΄λ‹€. λ‹€λ§Œ 둜그인이 μ„±κ³΅ν–ˆμ„ λ•Œ 항상 defaultSuccessUrl 에 λͺ…μ‹œλœ URL둜 μ΄λ™ν•˜λŠ” 것이 μ•„λ‹ˆλ‹€.

μ‚¬μš©μžκ°€ λ‘œκ·ΈμΈμ„ μ‹œλ„ν•  λ•Œ, μ›λž˜ κ°€λ €κ³  ν•œ URL을 μ„Έμ…˜μ˜ RequestCache 에 SavedRequest 객체둜 μ €μž₯ν•˜λŠ”λ°, λ§Œμ•½ SavedRequest κ°€ μ—†λ‹€λ©΄ defaultSuccessUrl 에 λͺ…μ‹œλœ URL둜 μ΄λ™ν•˜λŠ” 것이닀.

λ§Œμ•½ SavedRequest 의 쑴재 μ—¬λΆ€λ₯Ό ν™•μΈν•˜μ§€ μ•Šκ³  무쑰건 defaultSuccessUrl 의 URL둜 λ¦¬λ””λ ‰μ…˜ν•˜κ³  μ‹Άλ‹€λ©΄ 두 번째 νŒŒλΌλ―Έν„°μΈ alwaysUse 의 값을 true 둜 μ„€μ •ν•˜λ©΄ λœλ‹€.

λ‹€λ§Œ defaultSuccessUrl 섀정은 ν›„μˆ ν•  successHandler κ°€ μ„€μ •λ˜μ—ˆλ‹€λ©΄ μ™„μ „νžˆ λ¬΄μ‹œλœλ‹€.

failureUrl

failureUrl 은 둜그인 μ‹œλ„κ°€ μ‹€νŒ¨ν–ˆμ„ λ•Œ μ–΄λŠ URL둜 λ¦¬λ””λ ‰μ…˜ν• μ§€ μ§€μ •ν•˜λŠ” λ©”μ„œλ“œμ΄λ‹€.

failureUrl λ˜ν•œ failureHandler κ°€ μ„€μ •λ˜μ—ˆλ‹€λ©΄ μ™„μ „νžˆ λ¬΄μ‹œλœλ‹€.

usernameParameter

usernameParameter λ©”μ„œλ“œλŠ” μ‚¬μš©μž 아이디λ₯Ό μ–΄λ–€ HTTP νŒŒλΌλ―Έν„°λ‘œ 받을지 μ•Œλ €μ€€λ‹€. 이 섀정에 따라 μΆ”μΆœλœ 값이 loadUserByUsername λ©”μ„œλ“œμ˜ username νŒŒλΌλ―Έν„°λ‘œ μ „λ‹¬λœλ‹€.

passwordParameter

passwordParameter λ˜ν•œ λΉ„λ°€λ²ˆν˜Έλ₯Ό μ–΄λ–€ νŒŒλΌλ―Έν„°λ‘œ 받을지 μ•Œλ €μ£ΌλŠ” λ©”μ„œλ“œμ΄λ‹€. μΆ”μΆœλœ 값은 UserDetails 에 μ €μž₯된 λΉ„λ°€λ²ˆν˜Έ ν•΄μ‹œ κ°’κ³Ό λΉ„κ΅ν•˜μ—¬ μΈμ¦ν•œλ‹€.

failureHandler

failureUrl λ©”μ„œλ“œκ°€ λ‹¨μˆœνžˆ URL을 λ¦¬λ””λ ‰μ…˜ν•˜λŠ” 것에 λΉ„ν•΄ failureHandler λŠ” 더 λ‹€μ–‘ν•œ λ™μž‘μ„ μˆ˜ν–‰ν•  수 μžˆλ‹€. AuthenticationFailureHandler μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜κ±°λ‚˜ SimpleUrlAuthenticationFailureHandler λ₯Ό μƒμ†ν•˜μ—¬ 클래슀λ₯Ό λ§Œλ“€κ³  인자둜 λ„˜κ²¨μ€€λ‹€.

1
2
3
4
5
6
@Override
public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response,
		AuthenticationException exception) throws IOException, ServletException {
	
	// ...
}

보톡 onAuthenticationFailure λ©”μ„œλ“œλ₯Ό κ΅¬ν˜„ν•˜μ—¬ μ‚¬μš©ν•˜λŠ”λ°, HttpServletRequest μ—μ„œ μš”μ²­μ— λŒ€ν•œ 정보λ₯Ό κ°€μ Έμ˜¬ 수 있고, HttpServletResponse μ—μ„œ λ¦¬λ””λ ‰μ…˜κ°™μ€ 응닡을 μ œμ–΄ν•  수 μžˆλ‹€. exception 을 톡해 μ˜ˆμ™Έ νƒ€μž…μ„ ν™•μΈν•˜μ—¬ λΆ„κΈ° 처리λ₯Ό ν•  수 μžˆλ‹€.

successHandler

successHandler λ˜ν•œ defaultSuccessUrl 보닀 μ •κ΅ν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•œλ‹€. AuthenticationSuccessHandler μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜κ±°λ‚˜ SimpleAuthenticationSuccessHandler λ₯Ό 상속받아 클래슀λ₯Ό κ΅¬ν˜„ν•œλ‹€.

This post is licensed under CC BY 4.0 by the author.