종우의 삶 (전체 공개)

Spring security - 4 본문

개발/Spring

Spring security - 4

jonggae 2024. 1. 17. 18:06

로그인 구현 과정에서 진행이 잘 되지않으므로, 현재까지의 내용을 정리해보자.

 

1. Spring Security 의 전체 프로세스?

 

자주 봤던 그림이다. 스프링 시큐리티의 정확한 프로세스를 다시 한번 정리하고 막혔던 부분을 진행해보자.

 

 

Spring에서 모든 호출은 DispatcherServlet을 통과하게 되고 이후에 각 요청을 담당하는 Contorller로 분배된다.

 

https://mangkyu.tistory.com/18 (출처)

 

[Spring] Dispatcher-Servlet(디스패처 서블릿)이란? 디스패처 서블릿의 개념과 동작 과정

이번에는 servlet의 심화 또는 대표주자인 dispatcher-servlet에 대해서 알아보도록 하겠습니다. 1. Dispatcher-Servlet(디스패처 서블릿)의 개념 [ Dispatcher-Servlet(디스패처 서블릿) 이란? ] 디스패처 서블릿의

mangkyu.tistory.com

// DispatcherServlet

-> HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받음. 이후 적합한 컨트롤러로 보내준다. (위에서 한 설명과 동일)

 

1. 디스패처 서블릿이 요청을 받으면, 요청을 처리할 핸들러(컨트롤러)를 찾고 해당 객체의 메서드를 호출한다. 

HandlerMapping을 통해 어느 컨트롤러가 요청을 처리할지 식별하는데, 이때

Spring 의 @Controller, @RequestMapping 어노테이션이 사용된다.

 

2. 컨트롤러로 직접 요청을 위임하는 것이 아니라 HandelrAdapter를 이용하는데, 컨트롤러의 구현방식이 다양하기 때문이다. 이 과정을 거치면 컨트롤러가 요청을 받게 된다.

 

3.인터셉터들을 포함하여 요청 시 @RequestParam, @RequestBody등을 처리하고

응답 시 ResponseEntity의 body를 Json으로 직렬화 하는 처리를 진행한다. 이 모든 과정을 거쳐 컨트롤러로 들어가는 것

 

4.이후 컨트롤러를 통해 서비스를 호출하고 비지니스 로직들이 진행된다.

 

5. 비지니스 로직이 처리된 후 컨트롤러가 반환값을 반환한다. 

응답 값일 경우 ReponseEntity를, 응뎁 페이지를 보여주는 경우라면 String 으로 view의 이름을 반환할 수 있다. 

 

6. 마지막으로 HandlerAdpator가 컨트롤러의 응답을 반환하여 클라이언트로 보내준다.

 

---

 

이 때, 각 요청에 대해서 공통적으로 처리해야할 필요가 있을때, DispatcherServlet 이전에 단계가 필요한데, 

이것이 Filter이다

 

 

Form Login기반으로 진행할 때의 프로세스

 

UsernamePasswordAuthenticationFilter

Form Login 기반을 사용할때 username과 password를 확인하여 인증한다.

 

1. 사용자가 username과 password를 제출하면 UsernamePasswordAuthenticationFilter는 인증된 사용자의 정보가 담기는 인증 객체인 UsernamePasswordAuthenticationToken 를 만들어

AuthenticationManager에게 넘겨 인증을 시도한다.

 

2. 실패하면 SecurityContextHolder를 비우고

3. 성공하면 SecurityContextHolder에 Authentication 을 세팅한다

 

SecurityContextHolder

 

SecurityContextHolder는 인증이 완료된 사용자의 상세정보를 저장한다.

 

Authentication

현재 인증된 사용자를 나타내며, SecurityContext에서 가져올 수 있다.

 

UserDetailsService

username/password 인증방식을 사용할 때 사용자를 조회하고 검증한 후 UserDetails를 반화한다. Custom하여 bean으로

등록 후 사용  ->> UserDetailsServiceImpl이 이것인가봄

 

UserDetails

검증된 UserDetails는 UsernamePasswordAuthenticationToken타입의 Authentication을 만들때 사용되며, 해당 인증 객체는 SecurityContextHolder에 세팅된다. 커스텀하여 사용 가능.

 

 

---

 

 

'개발 > Spring' 카테고리의 다른 글

Spring security - 6 // 프로젝트 설명 - 회원 가입  (0) 2024.01.30
Spring security - 5 // 로그인 기능 구현  (0) 2024.01.29
Spring security - 3 // Security Config  (0) 2024.01.15
Spring security - 2  (0) 2024.01.14
Spring Security - 1  (0) 2024.01.14
Comments