Tomcat의 구조
![](https://blog.kakaocdn.net/dn/ludlg/btsj6Pkb6cA/dU5xVXuH885XCzuD5oKCNK/img.png)
- 요청이 들어오면 여러가지
Filter
들을 통해서 연쇄적으로 동작이 수행된다.
DispatcherServlet
을 통해서 어떤Controller
로 들어오는 요청인지 확인하고 해당Controller
를 통해 요청을 처리한다.
SpringSecurity 추가시
![](https://blog.kakaocdn.net/dn/ceD5IK/btsjZFDZxTt/acDqiEglLvimay74mDI180/img.png)
SpringSecurity
를 추가하게 되면 내장된Filter
가 등록되고, 이를SecurityFilter
라 부른다.
💡
더 정확히는 Tomcat의 filter중 Spring에서 작성된
DelegatingFilterProxy
를 filter로 등록한다.
이 DelegatingFilterProxy
는 내부적으로 스프링의 Bean인 FilterChainProxy
를 사용하는데, 이는 SecurityFilterChain
을 사용해서 SecurityFilter
들을 처리한다.
SpringSecurity의 구조
용어 정리
- Authentication(인증): 접근하는 사람이 누구인지 판별하는 과정
- Authorization(인가): 판별한 사람이 보안 주체에 접근할 수 있는지 판별하는 과정
- Principal(접근 주체): 접근 하는 사람(대상)
- Credential(비밀번호): Principal의 비밀번호
구조
![](https://blog.kakaocdn.net/dn/zni8R/btsj6RvydmJ/8H2dwZsiXOFkMf5pw80CJK/img.png)
- SecurityContextHolder 보안 주체의 세부 정보를 포함하여 프로그램의 현재 보안 상태(컨텍스트) 정보가 저장됨.
- SecurityContext
Authentication
(인증)을 보관하는 역할을 하며,SecurityContext
를 통해서Authentication
객체를 꺼내올 수 있다.
- Authentication
현재 접근하는 주체의 정보와 권한을 담은 인터페이스.
Authentication
객체는SecurityContext
에 저장되며,SecurityContextHolder
를 통해SecurityContext
에 접근,SecurityContext
을 통해Authentication
에 접근할 수 있다.
- UsernamePasswordAutneticationToken
Authentication
인터페이스를 구현한AbstractAuthenticationToken
의 하위 클래스로, User의 ID가 Principal이 되고, Password가 Credential역할을 한다.UsernamePasswordAuthenticationToken
의 첫번째 생성자는 인증전의 객체를 생성하고, 두번째 생성자는 인증이 완료된 객체를 생성한다.
- AuthenticationProvider
인증전의
Authentication
객체를 받아서 인증이 완료된 객체를 반환하는, 실제 인증에 대한 부분 역할을 한다.
- AuthenticationManager
AuthenticationProvider
를 등록하여 사용하게 해주는 인터페이스
- UserDetailsService
AuthenticationProvider
가 인증에 성공하면UserDetailsService
인터페이스를 통해UserDetails
객체를 반환함.
- UserDetails
UsernamePasswordAutneticationToken
을 생성하기 위해 사용됨.
Uploaded by N2T
(23.06.15 13:13)에 작성된 글 입니다.