[java] 스프링 부트와 스프링 시큐리티 연동 설정

스프링 부트는 웹 애플리케이션을 개발하기 위한 강력한 도구이며, 스프링 시큐리티는 애플리케이션 보안을 담당하는 프레임워크입니다. 이 두 가지를 함께 사용하여 웹 애플리케이션의 보안을 강화하는 방법에 대해 알아보겠습니다.

스프링 부트와 스프링 시큐리티 의존성 설정

먼저, 프로젝트에서 스프링 부트와 스프링 시큐리티 의존성을 추가해야 합니다. build.gradle 파일을 열고 다음과 같은 의존성을 추가합니다:

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-security'
}

스프링 시큐리티 설정 파일 작성

스프링 시큐리티를 사용하기 위해선 설정 파일을 작성해야 합니다. SecurityConfig.java 라는 이름의 파일을 생성하고 다음과 같이 작성합니다:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

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

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth
            .inMemoryAuthentication()
                .withUser("admin").password("{noop}password").roles("ADMIN")
                .and()
                .withUser("user").password("{noop}password").roles("USER");
    }
}

위의 설정은 /admin 경로는 ADMIN 역할을 가진 사용자만 접근 가능하도록, /user 경로는 ADMIN 또는 USER 역할을 가진 사용자만 접근 가능하도록 설정한 것입니다. 그 외의 모든 요청은 인증된 사용자에게만 허용됩니다.

인증에는 내장된 인메모리 유저를 사용하도록 설정했는데, 실제 애플리케이션을 개발할 때에는 데이터베이스 또는 외부 인증 공급자와 연동하도록 설정해야 합니다.

애플리케이션 실행

이제 스프링 부트 애플리케이션을 실행해보겠습니다. 애플리케이션이 시작되면 스프링 시큐리티가 적용된 보안 설정이 활성화됩니다.

브라우저를 열고 http://localhost:8080/admin 또는 http://localhost:8080/user로 접속해보면 인증을 요구하는 화면이 나타납니다. admin 또는 user 유저로 로그인하여 해당 페이지에 접근할 수 있습니다.

참고 자료