Spring Security 7

[Security] Success/Failure Handler Custom (인증성공, 인증실패 핸들러 커스텀)

: Security에서 지원하는 인증성공, 인증실패 핸들러를 상속한 클래스를 직접 커스텀하여 사용해보자. 1. 인증성공 핸들러 커스텀 2. 인증실패 핸들러 커스텀 3. config 설정 4. 익명클래스로 처리하는 방법 1. 인증성공 핸들러 커스텀 1. SimpleUrlAuthenticationSuccessHandler를 상속한 커스텀 클래스 CustomAuthenticationSuccessHandler를 만듭니다. 2. requestCache와 RedirectStragey를 사용하여 사용자가 인증 요청 성공시 이전에 접근하려 했던 자원(리소스)의 경로로 바로 보내기 위해서 설정해줍니다. 이전의 접근하려 했던 자원(리소스)가 없는 경우 null을 반환하도록 하여 setDefaultTargetUrl에 설정해..

Spring Security 2021.12.28

[Security] 세션 제어 필터 : SessionManagementFilter, ConcurrentSessionFilter

세션 제어 필터 : SessionManagementFilter, ConcurrentSessionFilter 1. SessionManagementFilter의 핵심적인 4가지 기능 1-1. 세션 관리 : 인증 시 사용자의 세션정보를 등록, 조회, 삭제 등의 세션 이력을 관리 1-2. 동시적 세션 제어 : 동일 계정으로 접속이 허용되는 최대 세션수를 제한 1-3. 세션 고정 보호 : 인증할 때 마다 세션쿠키를 새로 발급하여 공격자의 쿠키 조작을 방지 1-4. 세션 생성 정책 : Always, If_Required, Never, Stateless 2. ConcurrentSessionFilter의 기능 매 요청 마다 현재 사용자의 세션 만료 여부 체크 세션이 만료되었을 경우 즉시 만료 처리 session.isE..

Spring Security 2021.12.09

[Security] 동시세션제어, 세션고정보호, 세션정책

1. 동시 세션 제어 : 동일한 계정으로 인증을 받을 떄 생성되는 세션의 개수가 허용 개수를 초과할 경우 어떻게 세션 유지할지 제어하는 것 최대 세션 허용 개수 초과 시 -> 시큐리티에서 2가지 전략을 제공합니다. 1. 이전 사용자 세션 만료 : 새로운 사용자에게 세션 생성, 이전(기존) 사용자의 세션을 만료시킵니다. 2. 현재 사용자 인증 실패 : 이전(기존) 사용자의 세션을 유지시키고, 새로운 사용자의 인증예외를 발생시킵니다. 사용 방법) http.sessionManagement() : 세션 관리 기능이 작동 protected void configure(HttpSecurity http) throws Exception { http.sessionManagement() .maximumSessions(1) ..

Spring Security 2021.12.08

[Security] Remember Me 인증 필터 (RememberMeAuthenticationFilter)

rememberMe기능을 활성화하여 로그인할 경우 사용자는 인증 객체를 담은 session과 함께 remember-me 쿠키를 받아 자원에 접근하게 된다. * rememberMe의 다양한 설정의 api들은 차후에 다뤄보자. 이후로 사용자의 세션이 만료되거나 사용자 브라우저 종료로 인하여 세션이 끊긴 경우 즉, 세션이 활성화되지 않아 인증 객체를 SecurityContext에서 찾지 못하는 경우 자동적으로 사용자의 인증을 유지하기 위하여 RememberMeAuthenticationFilter가 실행된다. 즉, 정리해보면 다음과 같이 2가지 조건이 충족해야 RememberMeAuthenticationFilter가 실행된다. * 필터가 작동하는 경우 1. Authentication 객체가 null일 경우. (..

Spring Security 2021.10.05

[Security] Logout 처리 필터 (LogoutFilter)

원칙적으로 로그아웃 시 스프링 시큐리티에서는 post 요청을 처리한다. logout을 실행하면 logout 처리와 logout과 관련된 요청을 처리하는 필터가 LogoutFilter이다. 전체적인 로그아웃 처리의 흐름을 살펴보자. 사용자가 로그아웃을하면 post방식으로 요청을 하고 LogoutFilter가 요청을 받는다. AntPathRequestMatcher(/logout)에서 해당 경로로 요청한 것이 맞는지 매칭을 한다. 매칭 실패 시 chain.doFilter을 호출하게 되고 (Default는 "/logout" 이다.) 매칭 성공시 인증 객체를 담고 있는 SecurityContext에서 인증 객체를 꺼내 SecurityContextLogoutHandler 로 전달한다. SecurityContextL..

Spring Security 2021.10.04

[Security] Form Login 인증 필터 (UsernamePasswordAuthenticationFilter)

사용자가 로그인을 실행하면 인증처리가 이루어지는데 인증처리를 담당하고 그에 관련된 요청을 처리하는 필터가 UsernamePasswordAuthenticationFilter 이다. UsernamePasswordAuthenticationFilter 내부적으로 각각의 인증처리의 역할에 따라서 여러 클래스를 호출하여 처리하게 되며 전체적인 인증처리의 흐름을 살펴보자. 1. 인증 처리 전 작업 우선 처음 사용자 인증 시도를 하면 UsernamePasswordAuthenticationFilter가 요청을 받는다 그리고 AntPathRequestMatcher(/login)에서 사용자가 요청한 요청 정보가 매칭이 되는지 확인한다. (Default는 "/login"이다.) 매칭 실패 시 chain.doFilter으로 호..

Spring Security 2021.10.04

[Security] 스프링 시큐리티 설정 및 사용자 정의 보안기능 구현

의존성 추가 (gradle) implementation 'org.springframework.boot:spring-boot-starter-security' 스프링 시큐리티 의존성을 추가 후 서버를 기동하면 기본적으로 시큐리티의 초기화 작업 및 보안설정이 이루어진다. 별도의 설정이나 구현을 하지 않아도 기본적인 웹 보안 기능이 현재 시스템에 연동이 되어 작동한다. WebSecurityConfigurerAdapter 클래스는 기본적인 웹보안 기능의 활성화 및 설정등.. 모든 처리를 한다. HttpSecurit 클래스는 세부적인 기능을 설정할 수 있는 인증API, 인가API를 제공한다. 사용자 임의 설정이 없을 경우 기본으로 아래의 api들을 호출하여 설정을 초기화 한다. (Default) private vo..

Spring Security 2021.10.03