spring boot3
-
Spring Security 6 시점에서 SecurityContextHolderFilter 로 변경되었고, SecurityContextHolderFilter 는사용자의 HTTP 요청이 들어왔을 때 SecurityContext 를 불러와 워커 스레드의 ThreadLocal 에 저장한다. 1️⃣ Tomcat 워커 스레드와 요청 처리클라이언트 → HTTP 요청Tomcat 워커 스레드 하나가 요청을 할당받는다.Tomcat 의 메인 쓰레드는 어플리케이션 실행만 담당한다.이 워커 스레드는 요청 수명 동안 재사용됨(Thread Pool)👉 그래서 ThreadLocal 정리가 매우 중요함 2️⃣ SecurityContextHolderFilter의 역할 (Spring Security 6 핵심)Spring Securi..
Spring Security6 SecurityContextHolderFilter 동작과 ThreadLocal Clear 시점Spring Security 6 시점에서 SecurityContextHolderFilter 로 변경되었고, SecurityContextHolderFilter 는사용자의 HTTP 요청이 들어왔을 때 SecurityContext 를 불러와 워커 스레드의 ThreadLocal 에 저장한다. 1️⃣ Tomcat 워커 스레드와 요청 처리클라이언트 → HTTP 요청Tomcat 워커 스레드 하나가 요청을 할당받는다.Tomcat 의 메인 쓰레드는 어플리케이션 실행만 담당한다.이 워커 스레드는 요청 수명 동안 재사용됨(Thread Pool)👉 그래서 ThreadLocal 정리가 매우 중요함 2️⃣ SecurityContextHolderFilter의 역할 (Spring Security 6 핵심)Spring Securi..
2025.12.16 -
DelegatingFilterProxy 란?서블릿 필터 클래스이다.서블릿 컨테이너(Tomcat)에 필터로 등록되지만 내부적으로는 Spring Bean 이름으로 실제 Filter를 찾아서위임(delegate) 한다. 즉, 서블릿 필터처럼 동작하지만 진짜 필터 로직은 Spring Context 내에 있는 Bean 이 처리한다. ⚙️ 동작 구조 요약 [서블릿 컨테이너의 Filter Chain] ↓DelegatingFilterProxy (서블릿 필터, Spring이 자동 등록) ↓ (Bean 이름 기반으로 찾아서 위임)springSecurityFilterChain (Spring Security의 실제 필터 체인 Bean) ↓security Filter들 (UsernamePasswor..
DelegatingFilterProxyRegistrationBean<T extends Filter>DelegatingFilterProxy 란?서블릿 필터 클래스이다.서블릿 컨테이너(Tomcat)에 필터로 등록되지만 내부적으로는 Spring Bean 이름으로 실제 Filter를 찾아서위임(delegate) 한다. 즉, 서블릿 필터처럼 동작하지만 진짜 필터 로직은 Spring Context 내에 있는 Bean 이 처리한다. ⚙️ 동작 구조 요약 [서블릿 컨테이너의 Filter Chain] ↓DelegatingFilterProxy (서블릿 필터, Spring이 자동 등록) ↓ (Bean 이름 기반으로 찾아서 위임)springSecurityFilterChain (Spring Security의 실제 필터 체인 Bean) ↓security Filter들 (UsernamePasswor..
2025.08.04 -
Spring Boot 3 에서 Spring Security 6 를 사용하여 로그인 시 동시 세션 제어를 설정하려고 한다. Spring Security 의 SecurityFilterChain 에서 Session 을 관리하는 Filter 는SessionManagementFilter 와 ConcurrentSessionFilter 이다. SessionManagementFilter인증 직후에 세션을 생성하거나 재사용하고, 세션 관련 정책을 적용한다. 세션을 관리하는 Filter 인 SessionManagementFilter 는 4가지 기능을 한다.세션 관리 : 인증 후 사용자의 세션 관리(등록, 조회, 삭제)동시 세션 제어 : 동일 계정에 대한 세션 관리세션 고정 보호 : 인증 후 세션 쿠키를 재발급하여 세션 ..
Spring Security 동시 세션 제어(SessionManagementFilter, ConcurrentSessionFilter)Spring Boot 3 에서 Spring Security 6 를 사용하여 로그인 시 동시 세션 제어를 설정하려고 한다. Spring Security 의 SecurityFilterChain 에서 Session 을 관리하는 Filter 는SessionManagementFilter 와 ConcurrentSessionFilter 이다. SessionManagementFilter인증 직후에 세션을 생성하거나 재사용하고, 세션 관련 정책을 적용한다. 세션을 관리하는 Filter 인 SessionManagementFilter 는 4가지 기능을 한다.세션 관리 : 인증 후 사용자의 세션 관리(등록, 조회, 삭제)동시 세션 제어 : 동일 계정에 대한 세션 관리세션 고정 보호 : 인증 후 세션 쿠키를 재발급하여 세션 ..
2025.06.16 -
Spring Security 6버전을 설정하면서 문득 FilterChain 의 순서가 궁금하여 찾아보다가 아래 방법으로 목록을 확인했다. @Autowiredprivate List securityFilterChains;@PostConstructpublic void printFilters() { securityFilterChains.forEach(chain -> { chain.getFilters().forEach(filter -> { System.out.println("FILTER === "+filter.getClass().getSimpleName()); }); });} SecurityFilterChain 목록을 가진 리스트를 @Autowired 를 통..
Spring Security FilterChain 목록 조회(@PostConstruct)Spring Security 6버전을 설정하면서 문득 FilterChain 의 순서가 궁금하여 찾아보다가 아래 방법으로 목록을 확인했다. @Autowiredprivate List securityFilterChains;@PostConstructpublic void printFilters() { securityFilterChains.forEach(chain -> { chain.getFilters().forEach(filter -> { System.out.println("FILTER === "+filter.getClass().getSimpleName()); }); });} SecurityFilterChain 목록을 가진 리스트를 @Autowired 를 통..
2025.06.16 -
Runnable 인터페이스란?작업(Task)을 정의하기 위한 함수형 인터페이스이다.주로 스레드에서 실행할 작업을 정의할 때 사용된다. @FunctionalInterfacepublic interface Runnable { void run();} 추상 메서드인 void run() 메서드만 존재한다.@FuntionalInterface 가 붙어있는 함수형 인터페이스라서 람다식으로 표현 가능하다.결과값이 없고 예외도 throws 하지 않는 단순한 실행 작업을 나타낸다. ✅ 언제 사용하나요? Thread 생성 시 실행할 작업 정의ExecutorService 같은 스레드 풀에 작업 제출할때 사용 ✅ Thread와 함께 사용하는 예 일반 클래스package com.obo.controller;public c..
Runnable 인터페이스, ExecutorService 인터페이스Runnable 인터페이스란?작업(Task)을 정의하기 위한 함수형 인터페이스이다.주로 스레드에서 실행할 작업을 정의할 때 사용된다. @FunctionalInterfacepublic interface Runnable { void run();} 추상 메서드인 void run() 메서드만 존재한다.@FuntionalInterface 가 붙어있는 함수형 인터페이스라서 람다식으로 표현 가능하다.결과값이 없고 예외도 throws 하지 않는 단순한 실행 작업을 나타낸다. ✅ 언제 사용하나요? Thread 생성 시 실행할 작업 정의ExecutorService 같은 스레드 풀에 작업 제출할때 사용 ✅ Thread와 함께 사용하는 예 일반 클래스package com.obo.controller;public c..
2025.05.16 -
환경 : Spring Boot 3, HikariCPSpring Boot 에서 DBCP 의 Connection Pool 에서 풀 안의 커넥션이 유효한지에 대한 쿼리문을 날리는데그게 ValidationQuery 이다.해당 쿼리문의 시간을 설정하고 로그로 확인하기 위해 작성하는 글이다. 1. pom.xml 에 log4j2 dependency 추가하기 org.springframework.boot spring-boot-starter-log4j2 2. Spring Boot 기본 logback 제외하기Spring Boot 의 기본 log 라이브러리인 logback 을 제외시킨다. org.springframework.boot spring-boot-starter org.springframewo..
Spring Boot log4j2 설정하기 (Spring Boot3, HikariCP)환경 : Spring Boot 3, HikariCPSpring Boot 에서 DBCP 의 Connection Pool 에서 풀 안의 커넥션이 유효한지에 대한 쿼리문을 날리는데그게 ValidationQuery 이다.해당 쿼리문의 시간을 설정하고 로그로 확인하기 위해 작성하는 글이다. 1. pom.xml 에 log4j2 dependency 추가하기 org.springframework.boot spring-boot-starter-log4j2 2. Spring Boot 기본 logback 제외하기Spring Boot 의 기본 log 라이브러리인 logback 을 제외시킨다. org.springframework.boot spring-boot-starter org.springframewo..
2025.04.30