✅ Spring Security는 로그인/로그아웃 컨트롤러를 안 만들어도 되는가?
✔️ 네! Spring Security는 로그인과 로그아웃을 자동으로 처리하는 API를 내장하고 있기 때문에, 따로 컨트롤러를 만들 필요가 없습니다.
✔️ 기본적으로 로그인 요청을 가로채서 처리하고, 로그아웃 요청도 자동으로 수행하는 보안 프레임워크입니다.
✅ 1. Spring Security가 자동으로 처리하는 부분
🔹 (1) 로그인 컨트롤러 없이 로그인 가능
http
.formLogin(form -> form
.loginPage("/auth/login.do") // 🔥 커스텀 로그인 페이지 (뷰만 제공)
.loginProcessingUrl("/auth/loginAction.do") // 🔥 Spring Security가 로그인 요청 자동 처리
);
✔️ 로그인 컨트롤러(@Controller) 없이도 로그인 가능
✔️ 사용자가 /auth/login.do로 이동하면 커스텀 로그인 페이지를 보여주고, POST /auth/loginAction.do 요청이 오면 Spring Security가 자동 처리
✔️ UserDetailsService에서 사용자 정보를 조회하고, PasswordEncoder를 사용해 비밀번호를 검증
🔹 (2) 로그아웃 컨트롤러 없이 로그아웃 가능
http
.logout(logout -> logout
.logoutUrl("/auth/logoutAction.do") // 🔥 Spring Security가 자동으로 로그아웃 처리
.logoutSuccessUrl("/index.do") // 로그아웃 후 이동할 페이지
.invalidateHttpSession(true) // 세션 무효화
.deleteCookies("JSESSIONID") // 쿠키 삭제
);
✔️ 로그아웃 컨트롤러 없이 /auth/logoutAction.do로 요청을 보내면 Spring Security가 자동으로 로그아웃 처리
✔️ 로그아웃 후에는 /index.do로 이동하도록 설정
📌 로그아웃 폼 예제
<form action="/auth/logoutAction.do" method="post">
<button type="submit">로그아웃</button>
</form>
🔥 Spring Security는 기본적으로 POST 방식 로그아웃을 사용하지만, GET 방식도 가능하게 설정할 수 있음!
✅ 2. Spring Security가 자동으로 제공하는 API
기능기본 URL설명
| 로그인 페이지 | /login | Spring Security 기본 로그인 폼 |
| 로그인 처리 | POST /login | Spring Security가 로그인 요청을 자동 처리 |
| 로그아웃 처리 | POST /logout | 로그아웃 시 세션 무효화 & 쿠키 삭제 |
📌 커스텀 로그인 페이지를 사용하면 /login 대신 직접 설정한 /auth/login.do를 사용하면 됨.
✅ 3. Spring Security는 로그인 & 로그아웃을 어떻게 처리하는가?
📌 1) 사용자가 로그인 요청을 보냄
POST /auth/loginAction.do
Content-Type: application/x-www-form-urlencoded
mbEmail=admin@example.com&mbPassword=password123
✔️ 사용자가 로그인 버튼을 누르면 로그인 요청이 자동으로 Spring Security로 전달됨
✔️ .loginProcessingUrl("/auth/loginAction.do") 설정 덕분에 컨트롤러 없이도 로그인 요청을 처리
📌 2) Spring Security가 UserDetailsService를 사용하여 사용자 조회
✔️ UserDetailsService에서 DB에 저장된 사용자 정보를 가져옴
✔️ PasswordEncoder를 사용하여 비밀번호가 일치하는지 확인
✔️ 인증이 성공하면 SecurityContextHolder에 사용자 정보 저장
📌 3) 인증 성공 후 원래 요청한 페이지로 이동
.defaultSuccessUrl("/index.do", false)
✔️ 로그인 성공 후, 사용자가 원래 가려던 페이지로 이동
✔️ 원래 요청한 페이지가 없으면 기본적으로 /index.do로 이동
📌 4) 로그아웃 시 Spring Security가 자동으로 처리
✔️ /auth/logoutAction.do 요청이 오면 Spring Security가 자동으로 로그아웃 처리
✔️ SecurityContextHolder에서 인증 정보 제거
✔️ 세션을 무효화하고, JSESSIONID 쿠키 삭제
✔️ 설정한 로그아웃 후 이동할 페이지(/index.do)로 이동
✅ 4. 결론
✔️ Spring Security는 로그인/로그아웃을 자동으로 처리하는 API를 제공하므로, 컨트롤러를 따로 만들 필요가 없음
✔️ .loginProcessingUrl()과 .logoutUrl()을 설정하면 Spring Security가 자동으로 로그인 & 로그아웃 요청을 처리
✔️ 개발자는 로그인/로그아웃 화면(뷰)만 만들면 됨
📌 즉, Spring Security는 "로그인/로그아웃을 담당하는 API"라기보다는, 애플리케이션의 전체 보안을 책임지는 프레임워크라고 볼 수 있음!
'Spring > 09. spring-security' 카테고리의 다른 글
| spring security formLogin 전체적인 흐름 동작 방식 (0) | 2025.03.21 |
|---|---|
| Spring Security는 로그인 & 로그아웃을 위한 API인가? (0) | 2025.03.05 |
| AuthenticationManager와 PasswordEncoder (0) | 2025.03.05 |
| .logout()과 .sessionManagement() (0) | 2025.03.05 |
| Spring Security의 보안 구성 흐름 / 설정 설명 (0) | 2025.03.05 |