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)
참고
'Spring > Spring Security' 카테고리의 다른 글
[Spring Security] 3-3. 인증: 패스워드 저장소 (0) | 2023.10.02 |
---|---|
[Spring Security] 3-2. 인증: 아이디 / 패스워드 (2) | 2023.10.02 |
[Spring Security] 5. 예외 처리 (0) | 2023.09.30 |
[Spring Security] 3. 인증: 아키텍쳐 (0) | 2021.07.28 |
[Spring Security] 2. 스프링 시큐리티 주요 아키텍처 (0) | 2021.07.28 |