Spring Security는 Spring기반 애플리케이션의 보안을 담당하는 스프링 하위 프레임워크이고 '인증(Authentication)'과 '권한(Authorization)'에 대한 부분을 Filter의 흐름에 따라 처리 해준다.
implementation 'org.springframework.boot:spring-boot-starter-validation'
@Configuration
public class SecurityConfig{}
Chain안에서 여러 설정들을 할 수 있는데, 가장 기본적인 요청 따른 접근 제한을 설정해보자
@EnableWebSecurity
@Configuration
public class SecurityConfig{
@Bean
public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception {
httpSecurity
//httpRequest 권한 설정
.authorizeHttpRequests()
//해당 url 패턴의 요청은 모든 client에 대하여 허락한다
.regexMatchers("/home/.*").permitAll()
//해당 url 패턴의 요청은 모든 "USER"에게만 허락한다
.regexMatchers("/.*").hasRole("ROLE_USER")
//인증된 사용자에게 접근을 허용
.anyRequest().authenticated();
return httpSecurity.build();
}
}
순서에 따라 적용되므로 세부적인 주소를 먼저 작성해야한다
이외 여러가지 다양한 메서드를 지원한다
메소드 | 동작 |
---|---|
authenticated() | 인증된 사용자에게 접근을 허용 |
hasRole(String) | 사용자가 해당 역할이 있으면 허용 |
hasIpAddress(String) | 주어진 IP로부터 요청이 왔다면 허용 |
permitAll() | 무조건 접근 허용 |
denyAll() | 무조건 접근을 허용하지 않음 |
이 부분은 다음 포스팅에 자세히 알아보자.
아래는 스프링 시큐리티가 지원하는 다양한 필터 클래스 들이다
CorsFilter : 허가된 사이트나 클라이언트의 요청인지 검사하는 역할을 한다.
LogoutFilter : Request가 로그아웃하겠다고 하는것인지 체크한다.
UsernamePasswordAuthenticationFilter : username / password 로 로그인을 하려고 하는지 체크하여 승인이 되면 Authentication을 부여하고 이동 할 페이지로 이동한다.
BearerTokenAuthenticationFilter : Authorization 해더에 Bearer 토큰을 인증해주는 역할을 한다.
BasicAuthenticationFilter : Authorization 해더에 Basic 토큰을 인증해주는 역할을 한다.
RememberMeAuthenticationFilter : 아직 Authentication 인증이 안된 경우라면 RememberMe 쿠키를 검사해서 인증 처리해준다.