모르지 않다는 것은 아는것과 다르다.

전체 글 224

RememberMeAuthenticationFilter

Remember Me? 보통 로그인 폼 밑에 보면 아이디, 비밀번호 저장 체크박스를 볼 수 있다. -> 이것이 Remember Me 와 관련이 있다. 체크 박스를 체크하고 로그인 하는 순간 remember-me 라는 쿠키가 생성된다. 체크 박스 체크 : JSESSIONID, remember-me 모두 존재 체크 안함 : JSESSIONID 만 존재 강제로 JSESSION 를 삭제한다면? 체크 : 인증을 다시 받을 필요가 없다. 체크 안함 : 인증을 다시 받아야 한다. RememberMeAuthenticationFilter Spring Security 에서 제공하는 15개의 필터 외에 RememberMeAuthenticationFilter 가 있다. Authentication 객체가 null 이고, 사용자..

Spring Security 2022.02.28

AccessDesicionManager 와 AccessDecisionVoter

AccessDecisionManager 인증 정보, 요청정보, 권한정보를 이용해서 사용자의 자원접근에 대해서 Access Control 결정을 내리는 인터페이스이다. 여러개의 Voter 들을 가질 수 있다. Voter 들로부터 접근허용, 거부, 보류에 해당하는 각각의 값을 리턴받고 판단 및 결정한다. 구현체 3가지를 기본으로 제공한다. AffirmativeBased : 여러 Voter 중에 한명이라도 허용하면 허용, 기본전략 ConsensusBased : 다수결 UnanimousBased : 만장일치 accessDecisionManager() 를 따로 구현하지 않으면, 기본적으로 AffirmativeBased() 를 사용한다. 아래와 같이 AffirmativeBased 코드에서 voter에 의해서 res..

Spring Security 2022.02.28

ExceptionTranslationFilter,RequestCacheAwareFilter

ExceptionTranslationFilter AuthenticationException AuthenticationEntryPoint 를 호출한다. 인증정보가 없다면? -> 로그인 페이지로 이동한다. 401 오류 코드를 전달한다. 인증 예외가 발생하기 전의 요청 정보를 저장한다. 어떤 페이지로 접근하려했을때 인증이 되지않아 로그인 페이지로 이동한다면? -> 로그인 처리가 끝난 후 다시 원래 요청 페이지로 이동한다. RequestCache : 사용자의 이전 요청 정보를 세션에 저장하고 이를 꺼내 오는 캐시 메커니즘이다. SavedRequest : 사용자가 요청했던 request 파라미터 값들과 그 당시의 헤더값등을 저장한다. 정리하면 요청정보가 SavedRequest 에 담기고, RequestCache가..

Spring Security 2022.02.28

Security Filter

Spring Security Filter 스프링 시큐리티에서 기본적으로 제공하는 15개의 필터에 대해서 알아보려 한다. 아래와 같은 순서로 15개의 필터가 구성되어 있다. WebAsyncManagerIntegrationFilter SpringMVC Async Hanlder 를 지원하기 위한 필터다. SecurityContextHolder 는 thread local 을 사용하기 때문에 aysnc 한 핸들러(컨트롤러) 를 사용할 경우 같인 thread 를 사용하지 않아도 SecurityContext 를 공유할 수 있게 도와주는 필터이다. 역할을 아래와 같이 정리할 수 있다. preprocessing 과정에서 새로만든 thread 에 SecurityContext를 공유하는 작업이 일어난다. postproces..

Spring Security 2022.02.28

CustomUserDetailService

개요 스프링 시큐리티에서 기본적으로 UserDetailsService 를 제공해 주지만, 프로젝트에 맞게 커스텀할 일이 생기기 마련이다. 디비에서 사용자 정보를 가져와서 AuthenticationProvider 에게 UserDetails 타입의 유저 정보를 넘겨주는 UserDetailsService 를 직접 구현해 보려고 한다. UserDetailsService 위와 같이 UserDtailsService 는 UserRepository 로 부터 데이터를 가져와서 AuthenticationProvider 에게 UserDetails 타입의 유저 정보를 만들어서 넘겨준다. 코드 Account 엔티티 구현 @Entity @Data @EqualsAndHashCode(of = "id") @NoArgsConstruct..

Spring Security 2022.02.28

AuthenticationSuccessHandler, AuthenticationFailureHandler, AccessDeniedHandler 커스텀하기

개요 폼 인증, 인가를 성공하거나 실패한 후에 처리하고 싶은 작업을 AuthenticationSuccessHandler, AuthenticationFailureHandler, AccessDeniedHandler 를 커스텀해서 구현할 수 있다. AuthenticationSuccessHandler 는 인증 성공 후 처리 AuthenticationFailureHandler 는 인증 실패 후 처리 AccessDeniedHandler 는 인가 실패 후 처리 AuthenticationSuccessHandler 커스텀 CustomAuthenticationSuccessHandler 클래스 구현 @Component public class CustomAuthenticationSuccessHandler extends Sim..

Spring Security 2022.02.28

UsernamePasswordAuthenticationFilter 커스텀 하기

개요 UsernamePasswordAuthenticationFilter는 Id와 password를 사용하는 form 기반 인증을 처리하는 필터이다. UsernamPasswordAuthenticationFilter 를 상속받아서 Filter를 구성하는 것을 목표로 한다. UsernamPasswordAuthenticationFilter 의 메소드를 재정의 함으로서 커스텀한 필터를 구성할 수 있다. Login Form 인증 절차 먼저 AntPathRequestMatcher 를 통해서 요청 정보가 매칭되는지 확인한다. 정보가 맞지않으면 다음 필터로 넘어간다. 그 다음 Authentication 객체를 생성한다. (이 부분이 가장 큰 역할이다.) 그 다음 AuthenticationManager 가 Authenti..

Spring Security 2022.02.28

WebAuthenticationDetails 와 AuthenticationDetailsSource

개요 사용자가 인증을 요청할때, username, password 이외에 다른 값까지 같이 인증에 포함 시키고 싶은 경우가 있다. 그럴때 WebAuthenticationDetails 를 직접 구현해서 사용한다. WebAuthenticationDetails, AuthenticationDetailsSource 위와 같이 WebAuthenticationDetails 는 인증 과정 중 전달된 데이터를 저장한다. -> Authentication 의 details 속성에 저장한다. WebAuthenticationDetails 는 기본적으로 remoteAddress 와 SessionId 는 가지고 있다. AuthenticationDetailsSource 는 WebAuthenticationDetails 객체를 사용한다..

Spring Security 2022.02.28

CustomAuthenticationProvider

개요 사용자의 이름과 패스워드를 받아서 검증해서 AuthenticationManager 에게 전달하는 AuthenticationProvider 를 커스텀 해서 구현해 보려고 한다. AuthenticationProvider 위와 같이 UserDetailService 로 부터 UserDetails 객체를 전달받아 검증하고 그 결과를 다시 AuthenticationManger 에게 전달한다. 코드 CustomAuthenticationProvider 클래스 구현 public class CustomAuthenticationProvider implements AuthenticationProvider { @Autowired private UserDetailsService userDetailsService; @Auto..

Spring Security 2022.02.28

AuthenticationManager 와 AuthenticationProvider

AuthenticationManager 스프링 시큐리티에서 인증(Authentication)은 AuthenticationManager가 처리한다. AuthenticationProvider 목록 중에서 인증 처리 요건에 맞는 AuthenticationProvider 를 찾아 인증처리를 위임한다. 아래와 같이 부모 ProviderManager 를 설정하여 AuthenticationProvider 를 계속 탐색 할 수 있다. public interface AuthenticationManager { Authentication authenticate(Authentication authentication) throws AuthenticationException; } authentication 이 유효한 인증인지 확..

Spring Security 2022.02.28