[java] 자바 스프링 시큐리티 개요
스프링 시큐리티는 자바 애플리케이션에서 보안을 구현하기 위한 강력한 프레임워크입니다. 이를 통해 애플리케이션에 다양한 인증과 인가 기능을 추가할 수 있습니다. 스프링 시큐리티는 많은 기능을 제공하며, 개발자가 편리하게 보안을 구현할 수 있는 도구를 제공합니다.
스프링 시큐리티 핵심 개념
- 인증(Authentication): 사용자의 신원을 확인하는 과정으로, 사용자가 제공한 정보를 기반으로 인증을 수행합니다.
- 인가(Authorization): 인증된 사용자에 대해 어떤 작업을 수행할 수 있는지 결정하는 과정입니다.
- 권한(Authority): 특정 작업 또는 자원에 대한 접근 권한을 나타내는 역할입니다.
- 접근 제어(Access Control): 특정 작업이나 자원에 대한 접근 권한을 제어하는 기능입니다.
- 인메모리 인증(In-Memory Authentication): 애플리케이션 실행 시 메모리에 사용자 정보를 설정하여 인증을 수행하는 방식입니다.
- 데이터베이스 인증(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
메서드에서 사용자 정보를 설정하였습니다.