Spring Security

Ostr·2024년 5월 3일

스프링과 JPA

목록 보기
3/4
post-thumbnail

Spring Security란

Spring 기반 애플리케이션에서 보안을 쉽게 구현할 수 있도록 도와주는 강력한 보안 프레임워크이다. 주로 웹 애플리케이션에서 사용되며, 사용자 인증 (authentication)과 권한 부여 (authorization)를 효과적으로 관리할 수 있도록 지원한다.

  • 인증(Authentication): 사용자가 누구인지 확인하는 과정 (기본적인 사용자 이름과 비밀번호 인증뿐만 아니라 OAuth, LDAP, 혹은 기존의 사용자 정의 인증 프로세스를 지원)
  • 권한 부여(Authorization): 사용자가 특정 리소스에 접근할 수 있는 권한을 부여하는 과정 (URL, 메소드 호출, 페이지 접근 등 다양한 수준에서 권한을 관리)
  • 보안 설정: 간단한 설정을 통해 다양한 보안 요구사항을 충족 (세션 관리, HTTPS 적용, CSRF (Cross-Site Request Forgery) 방어 등을 쉽게 설정)
  • 사용자 세션 관리: 로그인 세션과 관련된 기능들을 제공하여 세션 유지 및 만료, 로그아웃 처리 등을 간편하게 구현

간단히 설명하면 Spring Security를 사용하여 로그인 폼을 만들고, 사용자의 아이디와 비밀번호를 입력받아 인증하는 웹 애플리케이션을 만들어 볼 수 있고 권한이 있는 사용자만 접근할 수 있는 페이지를 설정하고, 권한 없는 사용자는 접근할 수 없도록 제어한다.

Spring Security 5.7.x 버전 이상

스프링 시큐리티 5.7.0-M2 부터 WebSecurityConfigurerAdapter는 deprecated(더 이상 사용되지 않음)되었다.
[참고링크]-https://spring.io/blog/2022/02/21/spring-security-without-the-websecurityconfigureradapter

Security 구조

클라이언트스프링부트(어플리케이션)로 특정한 요청을 하면 요청이 서블릿 컨테이너를 지나 서블릿 컨테이너가 가지고 있는 필터를 통과하여 스프링부트로 들어오게된다.
여기서 스프링 시큐리티를 의존성으로 추가하게 되면 필터에서 스프링 시큐리티가 요청을 가로채서 접근권한, 로그인, 특정한Role을 가지고 있는지 검증을 한다.
간단하게 특정한 경로로 요청이 오면 Controller에 도달하기전 필터에서 Security가 검증을 한다.

Security 설정

Security 설정을 하려면 먼저 Secutiry Config클래스를 생성해야 한다.

@Configuration //설정파일을 만들기 위한 애노테이션, Bean을 등록하기 위한 애노테이션
@EnableWebSecurity //스프링 시큐리티를 활성화하고 웹 보안 설정을 구성하는 애노테이션
@EnableWebMvc //스프링 MVC를 활성화하는 어노테이션으로, 웹 애플리케이션에 Spring Web MVC를 구성
public class SecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
                .authorizeRequests((authorize) -> authorize
                        .mvcMatchers("/", "/login", "/sign-up", "/check-email-token",
                                "/email-login", "/login-by-email", "/search/study").permitAll() //경로에 대해 모든 사용자 허용
                        .mvcMatchers(HttpMethod.GET, "/profile/*").permitAll() //GET요청의 /profile/* 경로에 대해 모든 사용자 허옹
                        .anyRequest().authenticated() //그 외의 요청은 인증된 사용자만 접근 허용
                );
        return http.build();
    }
}

SecurityFilterChain securityFilterChain(HttpSecurity http)

  • securityFilterChain 메서드는 SecurityFilterChain 빈을 생성하고 반환하고 이 메서드는 HttpSecurity를 매개변수로 받아서 보안 필터 체인을 구성한다.
  • HttpSecurity는 스프링 시큐리티 설정을 구성할 때 사용되는 메서드를 제공하는 빌더 클래스이다.
  • authorizeRequests() 메서드는 요청에 대한 인가 규칙을 설정한다.
    • mvcMatchers()는 특정 패턴의 URL에 대해 접근 권한을 설정.
    • permitAll()은 해당 URL 패턴에 대해 모든 사용자에게 접근을 허용.
    • anyRequest().authenticated()는 그 외의 모든 요청에 대해 인증된 사용자만 접근을 허용.
    • http.build()는 구성된 보안 설정을 완료하고 SecurityFilterChain 객체를 반환.

Spring Bean등록에 대해 자세한 설명 링크: ⬇
망나니개발자 님의 [Spring] 빈 등록을 위한 어노테이션 👈

스프링 시큐리티 유튜브 강의 영상 및 출처: ⬇
개발자유미: https://www.youtube.com/watch?v=y0PXQgrkb90&list=PLJkjrxxiBSFCKD9TRKDYn7IE96K2u3C3U&index=1

0개의 댓글