SpringBoot 를 배워보자/7. 보안

스프링 시큐리티 기본 설정

_Blue_Sky_ 2024. 9. 29. 16:02
728x90
728x90

스프링 부트 스프링 시큐리티 기본 설정: 상세 가이드

소개

스프링 부트 스프링 시큐리티는 스프링 부트 애플리케이션에 강력한 보안 기능을 쉽게 추가할 수 있도록 도와주는 강력한 프레임워크입니다. 인증, 권한 부여, CSRF 보호 등 다양한 보안 기능을 제공하며, 커스터마이징을 통해 더욱 복잡한 보안 시나리오에도 적용할 수 있습니다. 이 글에서는 스프링 부트 스프링 시큐리티의 기본 설정 방법을 자세히 설명하고, 각 설정 항목의 의미와 활용 방법을 알아보겠습니다.

왜 스프링 시큐리티를 사용해야 할까요?

  • 간편한 설정: 스프링 부트 스타터를 통해 쉽게 설정할 수 있습니다.
  • 다양한 기능: 인증, 권한 부여, CSRF 보호, XSS 방지 등 다양한 보안 기능을 제공합니다.
  • 커스터마이징: 다양한 인터페이스와 확장 포인트를 제공하여 필요에 따라 커스터마이징이 가능합니다.
  • 활발한 커뮤니티: 많은 개발자들이 사용하고 있으며, 활발한 커뮤니티를 통해 다양한 정보를 얻을 수 있습니다.
728x90

기본 설정

1. 의존성 추가

implementation 'org.springframework.boot:spring-boot-starter-security'
 

2. SecurityConfig 클래스 생성

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .anyRequest().authenticated()
                .and()
                .formLogin();
    }
}
 
  • @Configuration: 스프링 설정 클래스임을 나타냅니다.  
     
  • @EnableWebSecurity: 스프링 시큐리티를 활성화합니다.
  • HttpSecurity: HTTP 요청에 대한 보안 설정을 위한 객체입니다.
  • authorizeRequests(): 요청에 대한 권한을 설정합니다.
    • anyRequest().authenticated(): 모든 요청에 대해 인증을 요구합니다.
  • formLogin(): 기본 로그인 페이지를 제공합니다.

3. 사용자 정보 설정

  • In-Memory 사용자:
    @Bean
    public UserDetailsService userDetailsService() {
        UserDetails user =
                User.withDefaultPasswordEncoder()
                        .username("user")
                        .password("password")
                        .roles("USER")
                        .build();
    
        return new InMemoryUserDetailsManager(user);
    }
    
     
  • DB 사용자: UserDetailsService 인터페이스를 구현하여 데이터베이스에서 사용자 정보를 조회하는 로직을 작성합니다.

주요 설정 항목

  • authorizeRequests(): 요청에 대한 권한을 설정합니다.
    • antMatchers(): 특정 URL에 대한 권한을 설정합니다.
    • hasAnyRole(), hasAuthority(): 특정 역할 또는 권한을 가진 사용자만 허용합니다.
    • permitAll(), denyAll(): 모든 사용자 허용 또는 거부
  • formLogin(): 로그인 페이지 설정
    • loginPage(): 로그인 페이지 URL 설정
    • loginProcessingUrl(): 로그인 요청 URL 설정
    • usernameParameter(), passwordParameter(): 사용자 이름과 비밀번호 파라미터 설정
  • logout(): 로그아웃 설정
    • logoutUrl(): 로그아웃 요청 URL 설정
    • logoutSuccessUrl(): 로그아웃 성공 후 이동할 URL 설정
  • csrf(): CSRF 보호 설정
  • httpBasic(): HTTP Basic 인증 설정
  • sessionManagement(): 세션 관리 설정

고급 설정

  • 커스텀 인증: UserDetailsService 인터페이스를 구현하여 사용자 인증 로직을 커스터마이징합니다.
  • 커스텀 접근 결정: AccessDecisionManager 인터페이스를 구현하여 접근 결정 로직을 커스터마이징합니다.
  • OAuth2: OAuth2를 통한 인증 설정
  • WebSocket 보안: WebSocket 통신 보안 설정

 

결론

스프링 부트 스프링 시큐리티는 스프링 부트 애플리케이션에 강력한 보안 기능을 제공하는 필수적인 프레임워크입니다. 이 글에서 소개한 기본 설정을 시작으로 다양한 설정을 통해 더욱 강력하고 안전한 애플리케이션을 개발할 수 있습니다.

 

728x90
728x90