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

Spring Security 27

Custom DSL 적용

개요 Spring Security 에서 제공하는 DSL(Doman Specific Language) 을 적용해 보고자한다. 폼인증 기반 필터가 아닌 직접만든 AjaxAuthenticationFilter 를 대상으로 구현해 볼 것이다. Ajax Custom DSLs 구현 스프링 시큐리티에서 제공하는 DSL 로 Config 를 구성하면 필터, 핸들러, 메서드, 속성 등을 한 곳에 정의하여 처리할 수 있는 편리함 제공한다. AjaxLoginConfigurer 구현 public final class AjaxLoginConfigurer extends AbstractAuthenticationFilterConfigurer { private AuthenticationSuccessHandler successHandler..

Spring Security 2022.02.28

Ajax 인증처이

Ajax 인증 처리 흐름 보는 것 처럼 인증의 경우 AjaxAuthenticationFilter 로 인가의 경우 FilterSecurityIntercepter 로 요청이 전달 되는 것을 확인할 수 있다. ajax 방식으로 구현하기 위해서 각각의 클래스 구현해 줘야 하지만, 방식은 폼인증 방식과 크게 다르지 않다. AbstractAuthenticationProcessingFilter 상속해서 구현할 수 있다. AjaxAuthenticationFilter 구현 폼인증 필터를 사용할 수 없기 때문에 AjaxLoginProcessingFilter 클래스 구현한다. public class AjaxLoginProcessingFilter extends AbstractAuthenticationProcessingFilt..

Spring Security 2022.02.28

Custom Filter

Custom Filter 구현 Spring Security Custom Filter 를 만들 수 있다. 기본적은 서블릿 필터를 만드는 것과 동일하다. 아래와 같이 구현할 수 있다. public class LoggingFilter extends GenericFilter { private Logger logger = LoggerFactory.getLogger(this.getClass()); @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { StopWatch stopWatch = new StopWatch(); st..

Spring Security 2022.02.28

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