스프링 시큐리티 기본

Choco·2023년 1월 19일
0
post-thumbnail

스프링 시큐리티란?

Spring Security는 Spring기반 애플리케이션의 보안을 담당하는 스프링 하위 프레임워크이고 '인증(Authentication)'과 '권한(Authorization)'에 대한 부분을 Filter의 흐름에 따라 처리 해준다.

Gradle 빌드

implementation 'org.springframework.boot:spring-boot-starter-validation'

Setting

1.별도의 SecurityConfig클래스을 하나 생성

@Configuration
public class SecurityConfig{}

2.SecurityFilterChain을 스프링빈으로 등록하고 요청에 따른 접근 권한여부를 설정

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()무조건 접근을 허용하지 않음

3.SecurityFilterChain에 필요한 필터들을 적용

이 부분은 다음 포스팅에 자세히 알아보자.
아래는 스프링 시큐리티가 지원하는 다양한 필터 클래스 들이다


  • CorsFilter : 허가된 사이트나 클라이언트의 요청인지 검사하는 역할을 한다.

  • LogoutFilter : Request가 로그아웃하겠다고 하는것인지 체크한다.

  • UsernamePasswordAuthenticationFilter : username / password 로 로그인을 하려고 하는지 체크하여 승인이 되면 Authentication을 부여하고 이동 할 페이지로 이동한다.

  • BearerTokenAuthenticationFilter : Authorization 해더에 Bearer 토큰을 인증해주는 역할을 한다.

  • BasicAuthenticationFilter : Authorization 해더에 Basic 토큰을 인증해주는 역할을 한다.

  • RememberMeAuthenticationFilter : 아직 Authentication 인증이 안된 경우라면 RememberMe 쿠키를 검사해서 인증 처리해준다.


0개의 댓글