스프링 프레임워크는 다양한 보안 기능을 제공하는데, 그 중에서도 스프링 시큐리티(Spring Security) 는 웹 애플리케이션의 보안을 강화하는 데 도움을 주는 핵심적인 기능이다. 이를 통해 웹 애플리케이션의 접근 제어, 사용자 인증, 권한 부여 등을 쉽게 구현할 수 있다. 이제 스프링 시큐리티를 사용하여 안전한 웹 애플리케이션을 구축하는 방법에 대해 알아보겠다.
스프링 시큐리티 설정하기
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/", "/home").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.permitAll();
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser("user").password("password").roles("USER");
}
}
WebSecurityConfig 클래스를 작성하여 WebSecurityConfigurerAdapter 를 확장한 후에, configure 메서드를 오버라이딩하여 HTTP 보안을 구성할 수 있다. 이를 통해 URL 별 접근 제어 및 사용자 인증 처리 등을 설정할 수 있다.
사용자 인증 및 권한 부여
스프링 시큐리티를 사용하면 손쉽게 사용자를 인증하고 권한을 부여할 수 있다. 인증은 사용자의 자격 증명(아이디, 비밀번호)을 확인하는 과정을 말하며, 권한 부여는 특정 리소스에 접근할 수 있는 권한을 부여하는 것을 말한다.
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/", "/home").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.permitAll();
}
위 코드는 “/”와 “/home” 경로에 대해 모든 사용자에게 접근을 허용하고, 나머지 모든 요청에 대해 인증을 요구한다는 설정을 하고 있다.
커스텀한 인증 및 권한 부여 로직 구현
스프링 시큐리티를 사용할 때, 커스텀한 인증 및 권한 부여 로직을 구현할 수도 있다. 예를 들어, DB에 저장된 사용자 정보를 이용하여 로그인 인증을 처리하거나, 동적으로 권한을 부여할 수 있다.
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth
.jdbcAuthentication()
.dataSource(dataSource)
.usersByUsernameQuery("select username, password, enabled from users where username=?")
.authoritiesByUsernameQuery("select username, authority from authorities where username=?");
}
위 코드에서는 jdbcAuthentication 메서드를 사용하여 데이터베이스를 통한 사용자 인증을 구성하고 있다.
스프링 시큐리티는 다양한 방식으로 보안 설정을 구성할 수 있으며, 풍부한 확장성과 커스터마이징 기능을 제공한다.
이상으로 스프링 시큐리티를 사용하여 안전한 웹 애플리케이션을 구축하는 방법에 대해 알아보았다.
참고문헌:
- 스프링 공식 문서
- Baeldung. “Introduction to Spring Security”