본문 바로가기
Framework/Spring

[Spring Security] 기본 설정 파일 생성

by 코딩하는 랄로 2024. 1. 30.
728x90

Spring Security 설치

스프링 시큐리티의 기본 동작 원리와 구조에 대해서 알아보았으니, 이를 사용하기 위해 Spring Security를 설치해보자. 설치하는 것은 어렵지 않다. 스프링 프로젝트의 build.gradle 파일에서 dependencies 부분에 다음을 추가하면 된다.

implementation 'org.springframework.boot:spring-boot-starter-security'
testImplementation 'org.springframework.security:spring-security-test'

 

두번째 줄은 test 환경에서 스프링 시큐리티를 동작하도록 하기 위함이다. 해당 dependency를 추가하고 gradle 파일을 다시 reloading 한다. ( intellij 를 사용하는 경우 build.gradle 파일을 수정하면 오른쪽 상단의 리로딩 버튼이 뜸 ) 이제 서버를 재시작하면 스프링 시큐리티의 기본 동작 로그인 페이지가 나온다면 잘 설치된 것이다.

 

 

 

Spring Security 설정

일반적으로 Spring Security를 dependency에 추가하기만 하여도 기본 설정으로 동작을 한다. 이러한 기본 설정 이외에 개발자가 원하는 설정대로 동작하게 하기 위해서는 다음과 같이 설정 파일을 만들어줘야 한다. 

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    // request 가 security filter 를 거쳐서 들어옴.
    // 이 때, 로그인이 되어 있지 않은 경우에 어떤 동작을 진행할 것인지를 설정
    @Bean
    public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception {
        // 모든 요청을 허락 => security 동작 시키지 않고 싶을 때 사용
        return httpSecurity
                .csrf(csrf-> csrf.disable())
                .authorizeHttpRequests(authorizeHttpRequests -> authorizeHttpRequests
                        .requestMatchers(new AntPathRequestMatcher("/**")).permitAll())
                .build();
    }

}

 

해당 코드에 대해서 천천히 뜯어보자. 먼저, @Configuration annotation은 해당 클래스가 스프링 프로젝트의 설정 파일임을 명시하여 준다. 다음으로 @EnableWebSecurity annotation은 모든 요청이 스프링 시큐리티의 제어를 받도록 하고 스피링 시큐리티를 활성화하는 역할을 한다. 이 두가지 annotation을 사용하여 해당 클래스가 스프링 시큐리티를 제어하는 설정을 담고 있음을 알려주는 것이다.

 

@Bean annotation은 스프링 시큐리티 설정 파일 내에서 사용되면 세부 설정을 담당하는 객체임을 알려준다. 위의 코드에서는 SecurityFilterChain 객체를 이용하여 세부 설정을 할 수 있게 되는 것이다. 이 때, SecurityFilterChain 객체를 반환하기 위해 HttpSecurity 의 build() 메소드를 사용하여 반환한다.

 

HttpSecurity

HttpSecurity 객체는 스프링 시큐리티의 설정 파일에서 매우 중요한 역할을 하는 객체이다. 왜냐하면 스프링 시큐리티의 각종 설정 대부분을 HttpSecurity가 도맡아 하기 때문이다.

  • 요청에 대한 접근 권한 설정
  • 인증 전체 흐름에 필요한 로그인, 로그아웃 페이지, 인증 완료 후 페이지, 실패시 페이지 등 설정
  • 인증 로직을 커스텀하기 위한 커스텀 필터 설정
  • 기타 csrf, 강제 https 호출 등 거의 모든 설정

 

다시 코드로 돌아와서, 위의 코드에서 HttpSecurity 객체를 통해 해준 설정들을 살펴보자. csrf는 스프링 시큐리티의 csrf 웹 보안 공격을 방어하기 위해 제공하는 기능으로 로컬에서 연습을 할 때는 크게 필요없기 때문에 이 기능을 잠시 disable 해 주는 설정이다. 

 

다음은 authorizeHttpRequsts 설정이다. 해당 설정은, 인증되지 않은 모든 페이지의 요청 ( /** ) 을 허락한다는 의미이다. 그렇기 때문에 로그인하지 않더라도 모든 페이지에 접근할 수 있도록 하는 설정이다. 이와 관련된 설정으로는 추후에 자세히 다루겠다.

 

이번 글에서는 Spring Security의 설정을 제어하는 파일을 생성하고 인증되지 않는 모든 페이지의 요청을 허용하는 간단한 설정을 해보았다. 다음 글에서는 더 다양한 설정에 대해서 알아보겠다.

 

 

728x90

'Framework > Spring' 카테고리의 다른 글

[Spring Security] 동작 구조에 대한 이해  (1) 2024.01.30
[Spring Boot] Cookie  (0) 2024.01.19
[Spring Boot] Lombok  (0) 2024.01.11
[Spring Boot] Controller  (1) 2024.01.08
[Spring Boot] 게시판 목록 페이지  (0) 2024.01.08