Spring Security - 1 - 설정

일단 스프링 부트 기준으로 설명을 합니다. 17버전 사용하고 있습니다.

의존성추가

    // Spring Security for JWT authentication
    implementation 'org.springframework.boot:spring-boot-starter-security'

Config 파일 작성

@Configuration
@EnableWebSecurity
public class SecurityConfig {

이렇게 Config 파일에 어노테이션을 추가합시다.

어노테이션에 대한 이해

@Configuration 어노테이션 설명

@Configuration 어노테이션은 Spring Framework에서 사용되며, 주로 Spring 애플리케이션 컨텍스트에서 구성 클래스를 정의할 때 사용됩니다.

주요 특징:

  1. Spring Bean 정의
    • @Configuration이 붙은 클래스는 하나 이상의 @Bean 메서드를 포함하고 있으며, 이러한 메서드는 Spring 컨테이너에 의해 관리되는 Bean을 정의합니다.
    • 해당 클래스는 Spring IoC 컨테이너에 의해 처리되고, Spring Bean 설정 메타데이터로 사용됩니다.
  2. 대체 XML 설정
    • 기존에 XML 파일로 설정하던 것을 자바 코드로 대체할 수 있게 합니다.
    • 자바 기반 설정 방식으로 더 읽기 쉽고, IDE의 코드 자동 완성 및 타입 검사를 활용할 수 있습니다.
  3. 싱글톤 보장
    • @Configuration 클래스는 내부적으로 CGLIB 프록시를 사용하여 Bean의 싱글톤을 보장합니다.
    • 동일한 Bean을 여러 번 요청해도 항상 동일한 인스턴스를 반환합니다.

사용 예제:

java
코드 복사
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AppConfig {

    @Bean
    public MyService myService() {
        return new MyServiceImpl();
    }

    @Bean
    public MyRepository myRepository() {
        return new MyRepositoryImpl();
    }
}

@EnableWebSecurity 어노테이션 설명

@EnableWebSecurity는 Spring Security에서 제공하는 어노테이션으로, Spring Security 설정을 활성화하고 구성할 수 있게 해줍니다. 이 어노테이션을 사용하면 Spring Boot 애플리케이션에 보안 기능을 추가할 수 있습니다.


주요 특징:

  1. Spring Security 활성화
    • Spring Security와 관련된 기본 설정을 활성화합니다.
    • 인증(authentication), 권한 부여(authorization), CSRF, 세션 관리 등 여러 보안 기능이 자동으로 적용됩니다.
  2. WebSecurityConfigurerAdapter와 함께 사용
    • @EnableWebSecurity를 사용하면, 보안 구성을 사용자 정의하려면 WebSecurityConfigurerAdapter를 확장한 클래스를 정의해야 합니다.
    • configure 메서드를 오버라이드하여 HTTP 요청, 인증/권한 부여 로직을 커스터마이징할 수 있습니다.
  3. 자동 구성 비활성화
    • Spring Boot에서는 기본적으로 spring-boot-starter-security를 의존성에 추가하면 기본 보안 설정이 적용됩니다.
    • @EnableWebSecurity를 사용하면 이러한 기본 설정이 비활성화되고, 사용자가 모든 보안 구성을 정의해야 합니다.

사용 예제:

java
코드 복사
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .csrf().disable() // CSRF 보호 비활성화
            .authorizeRequests()
                .antMatchers("/public/**").permitAll() // /public/** 경로는 인증 없이 접근 가능
                .anyRequest().authenticated() // 나머지 요청은 인증 필요
            .and()
            .formLogin(); // 기본 로그인 폼 사용
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder(); // 비밀번호 암호화 방식으로 BCrypt 사용
    }
}

'Spring - Spring Boot' 카테고리의 다른 글

Spring - Spring Boot - Swagger 설정하기  (0) 2024.12.12
Spring Security - 2 - Bean 등록  (1) 2024.12.04