[java] 자바 스프링 시큐리티 개요

스프링 시큐리티는 자바 애플리케이션에서 보안을 구현하기 위한 강력한 프레임워크입니다. 이를 통해 애플리케이션에 다양한 인증과 인가 기능을 추가할 수 있습니다. 스프링 시큐리티는 많은 기능을 제공하며, 개발자가 편리하게 보안을 구현할 수 있는 도구를 제공합니다.

스프링 시큐리티 핵심 개념

  1. 인증(Authentication): 사용자의 신원을 확인하는 과정으로, 사용자가 제공한 정보를 기반으로 인증을 수행합니다.
  2. 인가(Authorization): 인증된 사용자에 대해 어떤 작업을 수행할 수 있는지 결정하는 과정입니다.
  3. 권한(Authority): 특정 작업 또는 자원에 대한 접근 권한을 나타내는 역할입니다.
  4. 접근 제어(Access Control): 특정 작업이나 자원에 대한 접근 권한을 제어하는 기능입니다.
  5. 인메모리 인증(In-Memory Authentication): 애플리케이션 실행 시 메모리에 사용자 정보를 설정하여 인증을 수행하는 방식입니다.
  6. 데이터베이스 인증(Database Authentication): 데이터베이스에 저장된 사용자 정보를 이용하여 인증을 수행하는 방식입니다.

스프링 시큐리티 설정

스프링 시큐리티는 프로젝트의 의존성에 추가 후, 설정 파일을 통해 사용할 수 있습니다. 주요 설정은 아래와 같습니다.

1. 스프링 시큐리티 의존성 추가

Maven을 사용하는 경우, pom.xml 파일에 스프링 시큐리티 의존성을 추가합니다.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

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

스프링 시큐리티 설정 파일인 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")
            .antMatchers("/public/**").permitAll()
            .anyRequest().authenticated()
            .and().formLogin()
            .and().logout();
    }

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

위의 설정 예시는 /admin 경로에는 “ADMIN” 권한이 있는 사용자만 접근 가능하고, /user 경로에는 “ADMIN” 또는 “USER” 권한이 있는 사용자만 접근 가능하며, /public 경로는 모든 사용자가 접근 가능하도록 설정한 것입니다.

인메모리 인증을 위해 configureGlobal 메서드에서 사용자 정보를 설정하였습니다.

참고자료