[java] 스프링 부트와 스프링 시큐리티

스프링 부트는 자바 기반의 웹 애플리케이션을 빠르고 쉽게 개발하기 위한 프레임워크입니다. 스프링 시큐리티는 스프링 기반의 보안 프레임워크로서, 웹 애플리케이션의 인증과 권한 부여를 처리합니다. 스프링 부트와 스프링 시큐리티를 함께 사용하여 보안 강화된 웹 애플리케이션을 개발할 수 있습니다.

스프링 부트와 스프링 시큐리티의 기본 설정

스프링 부트와 스프링 시큐리티를 사용하려면 먼저 의존성을 추가해야 합니다. Maven을 사용하는 경우 pom.xml 파일에 다음과 같이 의존성을 추가합니다.

<dependencies>
    <!-- 스프링 부트 의존성 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <!-- 스프링 시큐리티 의존성 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
</dependencies>

스프링 부트와 스프링 시큐리티의 기본 설정은 application.properties 파일을 통해 구성할 수 있습니다. 예를 들어, 인증이 필요한 모든 요청에 대해 기본적으로 로그인 페이지로 리다이렉트하는 설정을 추가하기 위해서 다음과 같이 작성할 수 있습니다.

spring.security.user.name=admin
spring.security.user.password=1234
spring.security.user.roles=ADMIN

spring.security.basic.enabled=true
spring.security.basic.realm=My Realm

위의 설정에서는 admin 사용자 이름과 1234 비밀번호, ADMIN 역할을 가진 사용자를 생성하고, 기본적으로 HTTP 기본 인증을 사용하여 인증을 수행합니다.

커스텀 인증 및 인가 설정

스프링 시큐리티는 인증과 인가에 관련된 다양한 설정을 제공합니다. 실제로 스프링 시큐리티의 강력한 기능 중 하나는 커스텀 인증 및 인가 설정을 할 수 있다는 것입니다.

인증 및 인가 설정을 위해 WebSecurityConfigurerAdapter 클래스를 확장하여 커스텀 설정을 만들 수 있습니다. 예를 들어, 다음은 모든 요청에 대해 인증을 필요로하고 특정 URL에 대해 특정 권한이 있는 사용자만 접근 가능하도록 설정하는 코드입니다.

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/admin/**").hasRole("ADMIN")
            .anyRequest().authenticated()
            .and()
            .formLogin();
    }
}

위의 설정에서는 /admin/** URL에 대해서는 ADMIN 역할을 가진 사용자만 접근할 수 있고, 그 외의 URL에 대해서는 인증된 사용자만 접근할 수 있습니다. 또한, formLogin() 메서드를 통해 인증을 위한 폼 페이지를 사용하도록 설정하고 있습니다.

참고 자료