[java] Maven을 사용하여 스프링 시큐리티 구현하기

이번 포스트에서는 Maven을 사용하여 스프링 시큐리티를 구현하는 방법에 대해 알아보겠습니다.

1. Maven 프로젝트 생성

먼저, Maven 프로젝트를 생성해야 합니다. 이를 위해 다음 명령을 실행합니다:

mvn archetype:generate -DgroupId=com.example -DartifactId=security-demo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

위 명령을 실행하면 security-demo라는 이름의 프로젝트 디렉토리가 생성됩니다.

2. pom.xml 파일 설정

다음은 Maven 프로젝트의 pom.xml 파일에 필요한 종속성을 추가해야 합니다.

<dependencies>
  <!-- Spring Security -->
  <dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-web</artifactId>
    <version>5.4.1</version>
  </dependency>
  <dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-config</artifactId>
    <version>5.4.1</version>
  </dependency>
  <!-- Spring Web -->
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.4.2</version>
  </dependency>
  <!-- Spring Boot DevTools -->
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <version>2.4.2</version>
    <optional>true</optional>
  </dependency>
</dependencies>

위의 종속성들은 Spring Security와 Spring Web, 그리고 Spring Boot DevTools를 사용하기 위해 필요합니다.

3. Spring Security 설정

이제 Spring Security를 구성해야 합니다. src/main/resources 디렉토리에 application.properties 파일을 생성하고 다음 내용을 추가합니다:

spring.security.user.name=admin
spring.security.user.password=secret
spring.security.user.roles=USER

위 설정은 사용자 이름, 비밀번호 및 역할을 정의합니다. 이 예제에서는 사용자 이름을 admin, 비밀번호를 secret, 역할을 USER로 설정하였습니다.

4. 보안 구성 파일 생성

다음으로 src/main/java/com/example 디렉토리에 SecurityConfig.java 파일을 생성하고 다음 내용을 추가합니다:

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

}

이 클래스는 Spring Security의 설정 파일로 동작하며, WebSecurityConfigurerAdapter 클래스를 상속받아 구현합니다.

5. 인증 및 접근 제어 설정

SecurityConfig 클래스 내에서 인증 및 접근 제어를 설정해야 합니다. 다음은 예제 설정입니다:

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .and()
            .httpBasic();
    }
}

위 설정은 모든 요청에 대해 인증을 요구하며, 폼 기반 인증을 사용하고, HTTP Basic 인증도 지원합니다.

6. Spring Boot 어플리케이션 실행

이제 모든 설정이 완료되었습니다. 다음 명령으로 Spring Boot 어플리케이션을 실행합니다:

mvn spring-boot:run

어플리케이션이 성공적으로 실행되면 웹 브라우저에서 http://localhost:8080에 접속하여 인증을 시도할 수 있습니다. 위에서 설정한 사용자 이름과 비밀번호를 입력하면 인증이 성공하게 됩니다.

결론

이렇게 Maven을 사용하여 스프링 시큐리티를 구현하는 방법을 알아보았습니다. Spring Security를 사용하면 웹 애플리케이션의 인증과 접근 제어를 손쉽게 구현할 수 있습니다.