본문 바로가기
IT/spring

스프링 부트 시큐리티

by 뉴코딩맨 2023. 7. 6.
스프링 부트 시큐리티는 스프링 기반 애플리케이션의 인증(Authentication)과 인가(Authorization)를 처리하기 위한 기능을 제공하는 모듈입니다. 스프링 부트 시큐리티는 애플리케이션의 보안 요구사항을 충족시키고 사용자 인증, 권한 부여, 세션 관리 등의 보안 기능을 간편하게 구현할 수 있도록 도와줍니다.

 

 

사용법

스프링 부트 시큐리티를 사용하기 위해서는 의존성을 추가하고 구성 파일을 설정해야 합니다. 주요한 설정 요소는 다음과 같습니다.
 

1. 의존성 추가

pom.xml 파일에 스프링 부트 시큐리티 모듈의 의존성을 추가합니다.
 
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

 

2. 보안 구성

WebSecurityConfigurerAdapter를 상속받은 설정 클래스를 작성하여 보안 구성을 정의합니다. 예를 들어, SecurityConfig 클래스를 작성하고 @EnableWebSecurity 어노테이션을 추가합니다.
 
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    // 보안 구성 작성
}

 

3. 인증 및 인가 설정

보안 구성에서 인증(Authentication) 및 인가(Authorization) 설정을 정의합니다. 사용자의 인증 방식, 권한 설정 등을 구성합니다.
 
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.inMemoryAuthentication()
        .withUser("user")
        .password("{noop}password")
        .roles("USER");
}

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
        .antMatchers("/admin").hasRole("ADMIN")
        .antMatchers("/user").hasRole("USER")
        .anyRequest().authenticated()
        .and()
        .formLogin();
}
 
위의 예시에서는 사용자의 인증 정보를 메모리에 저장하고, /admin 경로는 "ADMIN" 권한을 가진 사용자만 접근할 수 있도록 설정하고, /user 경로는 "USER" 권한을 가진 사용자만 접근할 수 있도록 설정하였습니다. 또한, 나머지 모든 요청은 인증된 사용자만 접근할 수 있도록 설정하고, 로그인 폼을 제공합니다.
 
 

보안 기능 활용 예시

스프링 부트 시큐리티를 활용하여 다양한 보안 기능을 구현할 수 있습니다. 예를 들어, 다음과 같은 경우에 활용할 수 있습니다.

 

1. 사용자 활성화

스프링 부트 시큐리티를 사용하여 사용자 인증과 권한 부여를 구현하면, 애플리케이션의 보안을 효과적으로 관리할 수 있습니다. 사용자 인증을 통해 액세스 제어를 강화하고, 권한 부여를 통해 특정 기능 또는 리소스에 대한 접근 권한을 지정할 수 있습니다. 이를 통해 애플리케이션의 보안 강화와 데이터의 안전한 처리를 실현할 수 있습니다.
 

예시: 스프링 부트 시큐리티 설정

다음은 스프링 부트에서 스프링 부트 시큐리티를 활용하여 사용자 인증과 권한 부여를 설정하는 예시입니다.
 

1. 의존성 추가

먼저, pom.xml 파일에 스프링 부트 시큐리티 모듈의 의존성을 추가해야 합니다.
 
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

 

2. 보안 구성

다음으로, WebSecurityConfigurerAdapter를 상속받은 설정 클래스를 작성하여 보안 구성을 정의합니다. 예를 들어, SecurityConfig 클래스를 작성하고 @EnableWebSecurity 어노테이션을 추가합니다.
 
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    // 보안 구성 작성
}

 

3. 인증 및 인가 설정

보안 구성에서 인증(Authentication)과 인가(Authorization) 설정을 정의합니다. 다음은 사용자의 인증 정보를 메모리에 저장하고, 경로별로 접근 권한을 설정하는 예시입니다.
 
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.inMemoryAuthentication()
        .withUser("user")
        .password("{noop}password")
        .roles("USER");
}

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
        .antMatchers("/admin").hasRole("ADMIN")
        .antMatchers("/user").hasRole("USER")
        .anyRequest().authenticated()
        .and()
        .formLogin();
}
 
위의 예시에서는 configure(AuthenticationManagerBuilder auth) 메소드에서 사용자를 메모리에 저장하고, configure(HttpSecurity http) 메소드에서 경로별로 접근 권한을 설정합니다. /admin 경로는 "ADMIN" 권한을 가진 사용자만 접근할 수 있도록, /user 경로는 "USER" 권한을 가진 사용자만 접근할 수 있도록 설정하였습니다. 나머지 모든 요청은 인증된 사용자만 접근할 수 있도록 설정하고, 로그인 폼을 제공합니다.
 

결론

스프링 부트 시큐리티는 스프링 기반 애플리케이션의 보안을 강화하기 위한 강력한 도구입니다. 이를 통해 사용자 인증과 권한 부여를 손쉽게 구현할 수 있으며, 다양한 보안 기능을 활용하여 애플리케이션의 안전성을 높일 수 있습니다. 예제를 통해 스프링 부트 시큐리티의 기본적인 사용법을 알아보았습니다. 추가적인 기능과 설정에 대해서는 공식 문서나 다양한 자료를 참고하시면 됩니다. 애플리케이션의 보안을 강화하고 사용자 데이터를 안전하게 처리하기 위해 스프링 부트 시큐리티를 적극적으로 활용해보세요.
 

 

댓글