전체 글 353

[Spring Security] SessionID 관련 주요 필터, 이벤트처리 및 설정

SessionManagementFilter동시 세션 제어 : 동일 계정의 최대 허용 세션 수 초과여부 확인 및 처리세션 보호 : 로그인시 새로운 세션 생성하여 기존 세션 사용 못하도록 함세션 생정시 이벤트 발생 ConcurrentSessionFilter매 요청마다 세션의 만료 여부를 실시간으로 체크하여 중복로그인 등으로 만료된 세션 접근 차단 HttpSessionEventPublisher서블릿 컨테이너(예 : 톰캣) 에서 발생하는 HttpSession 이벤트 감지하여 Spring 이벤트로 변환 하고 발행함Spring 에서는 서블릿 컨테이너 동작을 알 수 없기 때문에 중간에 다리를 놓아주는 게 필요하다.동시세션 제어 기능을 정확하게 동작시키기 위해 반드시 필요.SessionCreationEventSessi..

Backend/SpringBoot 2025.12.17

[Spring Security] CORS 설정

예전에는 프론트엔드 렌더링도 백앤드에서 처리해서 출처가 같았으나, 이제는 프론트, 백앤드가 서로 분리되어 있기 때문에 허용 설정을 해주어야 한다. 브라우저에서 출처가 다르면 block을 하는데, 브라우저에서 프론트엔드 페이지를 띄우는 서버가 다르고, 해당 프론트엔드에서 백엔드로 API 통신을 하여 데이터를 가져오면, 두개의 출처가 다르기 때문에 block을 하는것이다. 때문에 이를 방지하기 위해 서버에서 설정을 통해 프론트엔드와 동일한 출처임을 인식 시키도록 해야 한다.나도 그랬고, CORS 설정이 서버인줄 알았는데 브라우저에서 한다. 즉 모바일 앱 같은 경우에는 따로 설정이 필요 없다는 소리이고, 브라우저를 이용하는 프론트엔드에만 필요한 설정이라는 것이다. 아래는 CORS 설정 예 이다. @Conf..

Backend/SpringBoot 2025.12.16

[Spring Security] CSRF 토큰 사용

만일 쿠키 기반 SessionID 를 이용하여 인증할 경우에는 CSRF 토큰 사용을 하여 보안을 강화해야 한다. 그러나 만일 JWT를 이용하여 header 에 클라이언트가 수동으로 추가 할 경우에는 CSRF 토큰을 사용하지 않아도 되므로 이 페이지는 무시해도 된다. 보안에 관련된 내용은 여기에 있다. (https://dean83.tistory.com/380)이 중 CSRF 토큰 발급을 통해 방어(?) 를 하는 내용에 대해 정리한다. 토큰 발급은 Springboot 에서 최초 요청시 토큰이 없다면 자동 발급 및 저장을 해 둔다. 단, 쿠키를 사용하지 않는 경우에는 별도의 url을 만들어 줘야 하고, 프론트에서 이를 요청해서 가져가야 한다.@GetMapping("/csrf")public CsrfToken..

Backend/SpringBoot 2025.12.16

[Spring Security] MethodSecurity 및 커스텀 핸들러

SecurityFilterChain을 통해 url 에 대한 권한을 설정할 수 있는데, url으로는 권한체크가 어려운경우, 메소드 실행에서도 보안체크가 가능하다. 사용에 있어 한가지 헷갈리는 경우는 보통 id와 연계되어 있는 경우는 인자값으로 받은 id 혹은 token에 있는 id를 이용하여 메소드에서 소유권 확인등이 가능한테 굳이 써야 하는가? 라는 의문이 들었다. 해당 처리 코드들이 중복되거나 누락될 수도 있기 때문에 "선택" 적으로 사용한다고 생각된다. 사용법은 다음과 같다. @EnableMethodSecurity 어노테이션을, SecurityConfig Configuration에 붙여준다.@EnableWebSecurity가 적용된곳에 같이 추가 하면 된다.@PreAuthorize을 필요한 메소드..

Backend/SpringBoot 2025.12.16

Spring MVC 인증흐름과 주요 인터페이스들 (Form login기준)

전반적인 인증 흐름을 정리해 보자면 다음과 같다. Filter (인증전 Authentication 객체 생성하여 전달)-> Authentication Manager 호출 AuthenticationManager에서 처리 가능한 Provider 에게 인증 위임Provider 에서 UserDetailsService 호출 및 PasswordEncoder 를 통해 인증 (둘 다 개발자 코드 구현필요)AuthenticationManager 에서 결과 이벤트 발생 및 인증 결과를 Filter에 반환Filter 에서 인증결과가 담긴 Authentication 객체를 SecurityContextHolder를 통해 저장인증이 성공했든, 하지 않았든 권한이 있는지 확인하고 권한이 있다면 수행AuthorizationManag..

[Spring Security] JWT 사용시 Filter 구성 예

JWT를 이용할 경우, 다음의 필터 구성을 한다.JWT 검증 -> 로그인 + JWT 발급 -> 인가 -> 예외처리UsernamePasswordAuthenticationFilter 앞에 JwtAuthenticationFilter 삽입JWT 의 커스텀 필터 예@Componentpublic class JwtAuthenticationFilter extends OncePerRequestFilter { private final JwtTokenProvider jwtTokenProvider; public JwtAuthenticationFilter(JwtTokenProvider jwtTokenProvider) { this.jwtTokenProvider = jwtTokenProvider; }..

Backend/SpringBoot 2025.12.15

Filter 및 SecurityFilterChain

요청이 오면, 이를 dispatcherServler 에 전달하기전에 중간에서 가로채어 공통적인 전, 후 처리를 수행한다. 인증, 인가, 로깅, 데이터 압축등을 처리한다. 필터체인에는 여러개의 필터들이 존재하고, 이를 순차적으로 처리 하게 된다. 내장 서버에서 수행하게 되고, 만일 Spring Security가 있을 경우에는 Spring container에 있는 SecurityFilterChain을 DelegatingFilterProxy에서 호출하여 수행하고, 다음 Filter를 수행하게 된다. 모든 Filter가 수행된 후에는 DispatcherSurvlet으로 요청을 넘겨준다. FilterChainProxySecurityFliterChain 의 목록을 관리하고, 적절한 SecurityFliterCha..

Spring boot의 요청 처리 흐름

Springboot 의 대략적인 동작 형태를 정리하면 다음과 같다. (상세한 부분이 아닌, 대략적인 형태이다)일단, 구성은 2가지 파트로 되어 있다. 내장된 서버 그리고 Spring Container 로 구성되어 있다. 내장된 서버(예 : 톰캣)의 경우에는 요청이 오면, 필터 체인을 통해 요청을 처리하고, DispatcherServlet을 통해 Spring container로 넘기게 되어 있다. 요청이 오면, Springboot 에 내장된 웹서버 (예 톰캣)필터체인에서 각 필터들을 수행통과를 모두 하게 되면 DispatcherServlet 을 통해 spring container로 전달HandlerMapping 을 통해 어느 컨트롤러로 넘겨줄지 판단HandlerInterceptor를 통해 공통 로직 처리..

쿠키 및 세션 보안 관련 (CSRF 등)

쿠키 설정에서, 다음의 공격에 대한 방어를 해야 한다. Secure일반 http 통신의 경우 세션 탈취에 매우 취약하므로, https 에서만 쿠키를 저장하도록 강제 (Secure=true)XSS악성 자바스크립트에서 세션을 탈취할 수 있으므로, HttpOnly = true 설정을 통해 자바스크립트에서는 쿠키 접근을 차단CSRF쿠키가 브라우저에 저장되는 점을 악용하여 이용자가 의도하지 않은 공격을 할 수 있는 상황을 막는다. 상황 : 이용자가 A 사이트 방문 -> 세션 및 쿠키 저장 -> 이용자가 B 사이트 저장 -> B 사이트의 html 페이지 내 악의적인 코드를 통해 A 사이트의 쿠키를 탈취 및 이용하여 B 사이트에서 A 사이트에 불법 접근 및 공격SameSite 설정을 통해 방어Strict : 가장 ..

Backend/공통 2025.12.12

[Spring Security] 쿠키 및 세션

쿠키 및 세션은 편리하나, 보안위험이 매우 크다. 보안 관련해선 여기를 보면 된다. (https://dean83.tistory.com/380)기본적으로 한계가 있기 때문에 주로 JWT 같은 토큰 기반으로 인증을 한다. 쿠키서버가 사용자의 브라우저에 저장을 요청하는 작은 텍스트 데이터 조각.탈취 될 수 있으므로, 보안 속성 설정이 필수임.Secure 설정을 통해 Https 프로토콜 에서만 쿠키를 전송하도록 강제해야 한다.HttpOnly 설정을 통해 자바스크립트에서 쿠키 접근을 원천 차단 할 수 있다.CSRF 공격 방어를 위해 Strict 옵션을 이용하거나, x-csrf-token 값을 이용할 수 있다. 주 목적은 서버가 클라이언트를 실별 하기 위한 수단임HTTP 통신은 상태를 저장하지 않으므로 사용구조 :..

Backend/SpringBoot 2025.12.12