implementation 'com.h2database:h2:1.4.200' public class App { public static void main(String[] args) throws Exception { final String[] H2_ARGS = new String[]{ "-web" , "-webPort", "9091" , "-webAdminPassword", "" , "-browser" , "-tcp" , "-tcpAllowOthers" , "-tcpPort", "9090" , "-key", "test", "test" }; Server h2TcpServer = Server.createTcpServer(H2_ARGS); Server h2WebServer = Server.crea..
이전 글에서 스프링 시큐리티가 인증을 위해 어떤 설계로 구성, 동작하는지 전반적인 아키텍처를 살펴보았다. 객체간의 호출 관계를 텍스트로만 보면 약간 이해가 어려울 수 있는데 공식 도큐먼트에서 설명하고있는 예제를 통해 더 쉽게 이해할 수 있다. Form Login 폼 로그인의 아이디, 비밀번호를 폼에 입력해서 인증받을 수 있는 가장 일반적인 경우이다. 임의의 url로 접근했을 때 로그인 페이지로 리다이렉션되기까지... 1. 클라이언트의 /private 요청 클라이언트가 /private라는 api를 요청했다. 여기서 중요한점은 클라이언트는 인증과정에서 익명으로 판단된 것이다. 2. 접근 거부, AccessDeniedException 익명 클라이언트의 /private 요청은 SecurityFilterChain..
Spring Security - Architectrue에서 설명했던 아키텍쳐는 서블릿에서 스프링 시큐리티가 어떻게 Servlet 구조에서 인증, 인가를 하기위해 어떻게 동작하는지 살펴보았다. 클라이언트 요청이 일련의 필터체인을 거치면서 각 체인에 필요한 단계들을 거치는데 이러한 단계 뿐만 아니라 실제 애플리케이션 로직에서 사용할 공통적인 정보들을 공유하기 위해 ThreadLocal에 일련의 정보들을 보관하고 관리하는데 SecurityContextHolder이다. 위 그림의 SecurityContextHolder를 보면 여러 내부 하위 정보를 감싸는 형태로 구성되어 있는데, 실제 인증, 권한 정보를 저장하는 Principal, Credentials, Authorities 객체를 Authentication이..