이전 글에서 스프링 시큐리티가 인증을 위해 어떤 설계로 구성, 동작하는지 전반적인 아키텍처를 살펴보았다. 객체간의 호출 관계를 텍스트로만 보면 약간 이해가 어려울 수 있는데 공식 도큐먼트에서 설명하고있는 예제를 통해 더 쉽게 이해할 수 있다. Form Login 폼 로그인의 아이디, 비밀번호를 폼에 입력해서 인증받을 수 있는 가장 일반적인 경우이다. 임의의 url로 접근했을 때 로그인 페이지로 리다이렉션되기까지... 1. 클라이언트의 /private 요청 클라이언트가 /private라는 api를 요청했다. 여기서 중요한점은 클라이언트는 인증과정에서 익명으로 판단된 것이다. 2. 접근 거부, AccessDeniedException 익명 클라이언트의 /private 요청은 SecurityFilterChain..
Spring Security - Architectrue에서 설명했던 아키텍쳐는 서블릿에서 스프링 시큐리티가 어떻게 Servlet 구조에서 인증, 인가를 하기위해 어떻게 동작하는지 살펴보았다. 클라이언트 요청이 일련의 필터체인을 거치면서 각 체인에 필요한 단계들을 거치는데 이러한 단계 뿐만 아니라 실제 애플리케이션 로직에서 사용할 공통적인 정보들을 공유하기 위해 ThreadLocal에 일련의 정보들을 보관하고 관리하는데 SecurityContextHolder이다. 위 그림의 SecurityContextHolder를 보면 여러 내부 하위 정보를 감싸는 형태로 구성되어 있는데, 실제 인증, 권한 정보를 저장하는 Principal, Credentials, Authorities 객체를 Authentication이..
보안(Security)에는 크게 두가지 개념, 인증(authentication)과 인가(authorization) 부분으로 나뉜다. 인증은 이 사용자가 현재 사용자가 누구인지 확인하는 과정이며 인가는 이 사용자가 특정 리소스를 사용할 자격이 있는지에 대한 부분이다. 예를들어 로그인을 한다는 행위는 사용자가 누구인지 특정할 수 있는 인증에 해당하고, 로그인 한 사용자가 일반 사용자인지, 관리자인지에 따라 관리자 페이지를 보여줄지 등을 결정하는 과정이 인가 과정이다. 스프링 시큐리티는 애플리케이션에 대한 인증, 인가를 지원하기 위해 여러개의 필터들로 구성된 필터 체인과 연관된 여러 모듈로 구성되어 있다. 이러한 필터들을 개발자가 직접 생성 또는 수정할 수 있도록 되어있다. 오염된 물을 정수하기 위해서 여러개..
slf4j에서 로그를 쓸 때 아래와 같은 포맷이 매우 편해서 어떤 모듈을 사용하는지 궁금해서 라이브러리를 오픈해보았다. log.error("find by id = {}", id); 지금 프로젝트는 log4j 구현체를 사용하고 있었는데 org.apache.logging.log4j.message.ParameterizedMessage라는 구현체를 사용하고 있었다. Exception 메세지 +로 파라미터들을 메세지와 조합하는게 번거롭고 String.format을 사용하기엔 타입도 고려해줘야되고 귀찮은 점이 많았는데 이 구현체를 사용해서 아래 처럼 활용할 수 있을 것 같다. import org.apache.logging.log4j.message.ParameterizedMessage; public Class Cut..