Spring/Spring Security

[Spring Security] 2-1. 인증 필터

noahkim_ 2021. 7. 25. 15:59

Security Bean Filter는 SecurityFilterChain API를 통해 FilterChainProxy에 삽입됩니다.

Security Bean Filter는 인증, 인가, 보안 등을 목적으로 만들어진 다양한 구현체들이 존재합니다.

 

 

1. BasicAuthenticationFilter - HTTP Basic 인증

  • 보호자원 접근 시 서버가 클라이언트에게 401응답과 함께 'WWW-authenticate-header'을 기술해서 인증요구를 보냅니다.
  • Client는 ID:Password 값을 Base64로 Encoding한 문자열을 Authentication Header에 추가한 뒤 Server에게 Resource를 요청
  • ID, Password가 Base64로 Encoding되어 있어 ID, Password가 외부에 쉽게 노출되는 구조이므로 SSL이나 TLS는 필수임

 

설정

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
	    .httpBasic(Customizer.withDefaults());
            
        return http.build();
    }

}

 

 

2. UsernamePasswordAuthenticationFilter - Form 인증

  • 로그인 시, Session 및 인증토큰(SecurityContext) 생성/저장
  • 생성된 인증 토큰으로 접근/인증을 유지하는데 사용함

 

설정

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
			...
            .formLogin(Customizer.withDefaults());
            
        return http.build();
    }

}

 

 -> .loginPage() : 사용자 정의 로그인 페이지

 -> .defaultSuccessUrl() : 로그인 성공 후 이동 페이지

 -> .failureUrl() : 로그인 실패 후 이동 페이지

 -> .usernameParameter() : 아이디 파라미터명 설정

 -> .passwordParameter() : 패스워드 파라미터명 설정

 -> .loginProcessingUrl() : 로그인 Form Action Url

 -> .successHandler() : 로그인 성공 후 핸들러

 -> .failureHandler() : 로그인 실패 후 핸들러

 

 

3. LogoutFilter - 로그아웃

  • 로그아웃 시, 세션 무효화, 인증토큰 삭제, 쿠키정보 삭제, 로그인 페이지로 리다이렉트

 

설정

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
			...
            .logout(Customizer.withDefaults());
            
        return http.build();
    }

}

.logout()

 -> .logoutUrl() : 로그아웃 처리 URL

 -> .logoutSuccessUrl() : 로그아웃 성공 후 이동페이지

 -> .deleteCookies() : 로그아웃 후 쿠키 삭제 ( "JSESSIONID", "remember-me" )

 -> .addLogoutHandler() : 로그아웃 핸들러

 -> .logoutSuccessHandler() : 로그아웃 성공 후 핸들러

 

 

4. RememberMeAuthenticationFilter - Remember Me 인증

  • 세션이 만료되고 웹브라우저가 종료된 후에도 사용자를 기억하는 기능
  • Remember-Me 쿠키에 대한 Http 요청을 확인한 후 토큰 기반 인증을 사용해 유효성을 검사하고 토큰이 검증되면 사용자는 로그인

 

설정

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
			...
            .logout(Customizer.withDefaults());
            
        return http.build();
    }

}

 

 -> .rememberMeParameter() : 파라미터명

 -> .tokenValiditySeconds() : 토큰 유효기간

 -> .alwaysRemember() : 리멤버 미 기능이 활성화되지 않아도 항상 실행

 -> .userDetailsService(userDetailsService)

 

 

 

 

참고