Spring Boot 공부 일기 <21> - Spring Security

이동휘·2024년 9월 19일

Spring Boot

목록 보기
20/21

1. IDE

Intellij

2. 오늘 공부 내용

Spring Security

기본 개념

  • 인증 ( Authentication) - 사용자가 누구인지 확인하는 과정
  • 인가 (Authorization) - 인증된 사용자가 권한을 가지고 잇는지 확인하는 과정
  • 필터 체인 - 보안 필터들이 차례대로 실행되어 요청과 응답 사이에서 보안 검사를 수행

주요 기능

  • 기본 인증 흐름
    1. 사용자 요청이 들어옴: 사용자가 웹 애플리케이션에 로그인 요청을 합니다.
    2. AuthenticationManager: 사용자 자격 증명(예: 사용자 이름과 비밀번호)을 확인하는 역할을 합니다.
    3. AuthenticationProvider: 실제로 인증 논리를 수행하며, 다양한 방식의 인증(예: 비밀번호 기반, OAuth2, JWT 등)을 처리할 수 있습니다.
    4. UserDetailsService: 사용자 정보를 데이터베이스나 메모리에서 가져오는 서비스로, 사용자 이름을 기반으로 UserDetails 객체를 반환합니다.
    5. SecurityContext: 인증된 사용자 정보를 저장하고 관리하는 컨텍스트입니다. 이 컨텍스트는 애플리케이션 내에서 전역적으로 접근 가능합니다.
  • WebSecurityConfigurerAdapter - 보안 설정을 구성하기 위해 사용, 보안 설정을 커스터마이징 할 수 있음
    • configure(HttpSecurity http): URL 경로 기반으로 보안 설정을 구성하는 메서드입니다.
    • configure(AuthenticationManagerBuilder auth): 사용자 인증을 위해 AuthenticationProvider나 UserDetailsService 설정을 정의합니다.
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .csrf().disable() // CSRF 보호를 비활성화
            .authorizeRequests()
                .antMatchers("/public/**").permitAll() // /public/ 경로는 모두 접근 가능
                .antMatchers("/admin/**").hasRole("ADMIN") // /admin/ 경로는 관리자만 접근 가능
                .anyRequest().authenticated() // 그 외 모든 요청은 인증 필요
            .and()
            .formLogin()
                .loginPage("/login") // 로그인 페이지 설정
                .permitAll() // 로그인 페이지는 모두 접근 가능
            .and()
            .logout()
                .permitAll(); // 로그아웃은 모두 접근 가능
    }
}

0개의 댓글