본 포스팅은 ProviderManager와 AuthenticationProvider가 무엇인지 이해하고 이들을 이용해 인증하는 방법을 공부합니다. ProviderManager ProviderManager는 이름에서도 알 수 있듯이 provider를 관리하는 manager클래스 입니다. 예를 들어, 어떤 일을 하는데 작업을 하는 사람만 있다면 작업자들은 어떤 일을 누가 해야 할지 모를 수 있는데, 작업을 관리하는 관리자가 있다면 어떤 작업을 어떤 사람이 할지 지시를 해줌으로써 좀 더 효율적으로 작업을 할 수 있습니다. 이처럼 인증 작업을 어떤 클래스가 할지 정해주는 역할을 하는 것이 ProviderManager입니다. 즉, 인증 작업을 관리하는 매니저라고 생각할 수 있습니다. ProviderManager는..
본 포스팅은 Spring Security의 전체적인 흐름과 FilterChain이 어떻게 동작하는지 이해하는 것을 목표로 합니다. 우선 클라이언트가 HTTP 요청을 했을때 security가 어떻게 작동하는지 흐름부터 살펴본 뒤, 하나씩 알아보겠습니다. 클라이언트의 HTTP 요청이 서버에 도착합니다. "DelegatingFilterProxy"라는 서블릿 필터가 해당 요청을 가장 먼저 받아 "FilterChainProxy"에게 요청을 처리하도록 위임합니다. "FilterChainProxy"는 자신이 관리하고 있는 여러개의 "SecurityFilterChain"에게 순서대로 요청을 넘깁니다. 요청에 적합한 "SecurityFilterChain"내의 filter가 차례대로 실행되며, 각각의 filter는 보안(..
Session 관련 문제가 발생해 프로젝트의 Security 설정 부분을 살펴보다 Spring Security 부분을 공부를 해야겠다는 생각이 들었다. 그래서 거대한 Spring Security 부분을 차근차근 정리하면서 공부해보려고 한다. SecurityContextHolder SecurityContextHolder는 인증된 사용자의 정보를 저장하고 있는 저장소이다. SecurityContextHolder의 구조를 사진으로 보면 SecurityContext를 감싸고 있고 SecurityContext 안에 Authentication(인증)이 저장되어 있다. SecurityContextHolder 설정 1. SecurityContext securityContext = SecurityContextHolder..
Effective Java의 Item 17을 읽고 정리한 내용입니다. 변경 가능성을 최소화하라 불변 클래스란 인스턴스의 내부 값을 수정할 수 없는 클래스를 의미한다. (객체가 파괴되는 순간까지 절대 달라지지 않는다.) 클래스를 불변으로 만들기 위한 규칙 객체의 상태를 변경하는 메서드를 제공하지 않는다. 클래스를 확장할 수 없도록 한다. (final 키워드 사용) 클래스의 모든 필드를 final로 선언한다. 클래스의 모든 필드를 private로 선언한다. 자신 외에는 내부의 가변 컴포넌트에 접근할 수 없도록 한다. 5번 규칙이 잘 이해가 되지 않아 좀 더 자세히 정리해 봤다. 5번 규칙이 의미하는 바는 캡슐화라는 불변성의 측면을 나타내는데 더 자세히 말하면 객체의 내부 상태가 자체 메서드를 통해서만 변경되..
Spring Servlet이란? Spring Servlet은 웹 애플리케이션에서 클라이언트의 요청을 처리(요청을 받고, 응답을 반환)하는 작업을 한다. 일반적으로 이 Servlet을 Spring MVC 패턴에서 DispatcherServlet이라고 불린다. (Servlet은 일반적인 개념과 인터페이스를 나타내고, DispatcherServlet은 Spring의 특정 구현을 나타낸다.) 용어가 좀 헷갈릴 수 있는데 간단히 말하면 DispatcherServlet은 Servlet이지만 모든 Servleet이 DispatcherServlet은 아니다. Spring에서 DispatcherServlet의 역할은 Spring 기반 웹 애플리케이션의 앞단(front controller)에서 웹 요청을 적절한 Contr..
개인적으로 추상 클래스와 인터페이스가 비슷한 개념이라고 생각해 헷갈릴 때가 많았는데 이번에 두 클래스의 차이점에 대해 공부해 보자. 추상 클래스 추상 클래스는 인스턴스화할 수 없는 클래스로 다른 클래스에 의해 구현이 되도록 설계된 클래스이다. abstract 키워드로 선언해야 하며, 추상 클래스에는 구현체가 존재하지 않는 추상 메서드가 하나 이상 포함이 되어야 한다. 그렇다고 추상 클래스에는 추상 메서드만 존재하는 것이 아니라 일반적인 메서드, 생성자, 필드를 가질 수 있다. 추상 메서드는 메서드가 선언이 되었지만 구현이 없는 메서드이다. 추상 클래스의 하위 클래스는 추상 클래스 안에 있는 모든 추상 메서드를 구현해야 한다는 특징이 있다. 추상 클래스의 예시 코드를 살펴보자. 추상 클래스 Animal p..