스프링 시큐리티/실전프로젝트 - 인증 프로세스 Ajax 인증 구현

ch06. Ajax Custom DSLs 구현하기

webmaster 2022. 1. 21. 13:29
728x90
  • DSL : 도메인 특화 언어(시큐리티에서 특정 도메인을 접근할 수 있도록 제공한다)
  • Custom DSLs
    • AbstractHttpConfigurer
      • 스프링 시큐리티 초기화 설정 클래스
      • 필터, 핸들러, 메서드, 속성 등을 한 곳에 정의하여 처리할 수 있는 편리함 제공
      • public void init(H http) throws Exception -  초기화
      • public void configure(H http) – 설정
    • HttpSecurity 의 apply(C configurer) 메서드 사용
  • 이전 코드
    • 해당 방식으로 필터를 만들었다.

      여러 설정들의 AjaxLoginConfigurer에서 한다
  • 
    public class AjaxLoginConfigurer<H extends HttpSecurityBuilder<H>> extends
            AbstractAuthenticationFilterConfigurer<H, AjaxLoginConfigurer<H>, AjaxLoginProcessingFilter> {
    
        private AuthenticationSuccessHandler successHandler;
        private AuthenticationFailureHandler failureHandler;
        private AuthenticationManager authenticationManager;
    
        public AjaxLoginConfigurer() {
    
            super(new AjaxLoginProcessingFilter(), null);
        }
    
        @Override
        public void init(H http) throws Exception {
            //필터를 생성해서 부모 클래스에 전달
            super.init(http);
        }
    
        @Override
        public void configure(H http) {
            //Configure 설정을 모두 이 클래스에서 동작시킬수 있다.
            if(authenticationManager == null){
                //공유객체를 저장하고 가지고 오는 api
                authenticationManager = http.getSharedObject(AuthenticationManager.class);
            }
            getAuthenticationFilter().setAuthenticationManager(authenticationManager);
            getAuthenticationFilter().setAuthenticationSuccessHandler(successHandler);
            getAuthenticationFilter().setAuthenticationFailureHandler(failureHandler);
    
            SessionAuthenticationStrategy sessionAuthenticationStrategy = http
                    .getSharedObject(SessionAuthenticationStrategy.class);
            if (sessionAuthenticationStrategy != null) {
                getAuthenticationFilter().setSessionAuthenticationStrategy(sessionAuthenticationStrategy);
            }
            RememberMeServices rememberMeServices = http
                    .getSharedObject(RememberMeServices.class);
            if (rememberMeServices != null) {
                getAuthenticationFilter().setRememberMeServices(rememberMeServices);
            }
            http.setSharedObject(AjaxLoginProcessingFilter.class,getAuthenticationFilter());
            http.addFilterBefore(getAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);
        }
    
        public AjaxLoginConfigurer<H> successHandlerAjax(AuthenticationSuccessHandler successHandler) {
            this.successHandler = successHandler;
            return this;
        }
    
        public AjaxLoginConfigurer<H> failureHandlerAjax(AuthenticationFailureHandler authenticationFailureHandler) {
            this.failureHandler = authenticationFailureHandler;
            return this;
        }
    
        public AjaxLoginConfigurer<H> setAuthenticationManager(AuthenticationManager authenticationManager) {
            this.authenticationManager = authenticationManager;
            return this;
        }
    
        @Override
        protected RequestMatcher createLoginProcessingUrlMatcher(String loginProcessingUrl) {
            return new AntPathRequestMatcher(loginProcessingUrl, "POST");
        }
    }
728x90