Spring Security는 기본적으로 DefaultLogoutPageGeneratingFilter를 통해 로그아웃 페이지를 제공하며 GET /logout으로 접근이 가능하다. 로그아웃 실행은 기본적으로 POST /logout으로만 가능하며 csrf 기능을 비활성화 할 경우 또는 RequestMatcher 를 사용할 경우 GET, PUT, DELETE 모두 가능하다. 로그아웃 필터를 거치지 않고 MVC에서 커스텀으로 구현할 수 있으며, 로그인 페이지를 커스텀으로 구현했을 경우 로그아웃 또한 커스텀으로 구현해야 한다. 아래는 logout config 설정들이다. @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) th..
Spring Security

Spring Security에서는 익명 인증이라는 개념이 존재하는데, 익명 인증이란 인증 받지 않은 사용자를 의미한다. 이게 말이 좀 헷갈릴수 있지만 우리는 흔히 인증받은 사용자, 인증받지 않은 사용자 이렇게 구분해서 생각하지만 Spring Security는 인증받은 사용자, 익명으로 인증받은 사용자(=인증받지 않은 사용자) 로 구분한다. 그 이유는 SecurityContextHolder가 항상 Authentication 객체를 포함하고 null을 포함하지 않는다는 규칙을 세우면 클래스를 더 견고하게 작성할 수 있기 때문인데, 특정 자원에 요청을 보내면 이 요청이 인증된 사용자의 요청인지 익명으로 인증된 사용자의 요청인지 객체로 구분을 할 수 있다는 의미이다.anonymous config 설정은 대부분 ..

Spring Security에서 제공하는 기능 중 RememberMe 라는 기능이 있다. 이름에서부터 알수 있듯이 처음 인증에 성공하면 일정 시간동안 이 토큰이 있을 경우 자동 로그인 처리를 해주는 기능이다. 전체적인 흐름은 아래와 같다.최초 로그인을 했을 때 인증에 성공할 경우 RememberMe가 체크되어있는지 확인RememberMe가 설정 되어있을 경우 쿠키를 만들어서 클라이언트로 전달이후 클라이언트는 이 쿠키를 가지고 서버로 요청을 보낸다아래는 SecurityConfig에서 RemeberMe 관련 설정들이다.@EnableWebSecurity@Configurationpublic class SecurityConfig { @Bean public SecurityFilterChain securi..

스프링 시큐리티는 HttpServletRequest에서 사용자의 아이디와 패스워드를 읽어서 인증을 하는 메커니즘은 크게 Form 방식, Basic 방식 두 가지가 존재한다. 이번 포스트에서는 Form 방식을 다룰 예정이다.위의 이미지는 인증받지 않은 사용자의 요청에 대해서 spring security에서 어떻게 인증 페이지로 리다이렉트 하는지에 대한 메커니즘이다. 위의 매커니즘을 간단하게 설명하면 아래와 같다.클라이언트는 서버로 /private로 GET 요청을 보낸다.spring security는 이 요청을 가로채 인증 확인을 한다.인증되지 않은 사용자인 경우 AccessDeniedException을 발생시킨다.ExceptionTranslationFilter에서 이 예외를 받아서 처리해 설정되어있는 lo..

이번 포스트는 sprint security 의존성을 추가한 뒤 설정하는 기본적인 config 설정과 그에 대한 실습이다. 일단 나는 Spring Boot 3.2.5, Spring Security 6x, Java 17을 사용하고 빌드는 gradle로 진행했다. spring security 의존성 추가implementation 'org.springframework.boot:spring-boot-starter-security' 단지 의존성만 추가했을 뿐인데 Spring Security는 아래 4가지 설정을 지원한다.기본적으로 모든 요청에 대하여 인증 여부를 검증하고 인증이 승인되어야 자원에 접근이 가능인증 방식은 formLogin 방식과 httpBasic 방식을 제공인증을 시도할 수 있는 로그인 페이지가 자동..