[TIL] Spring Security 사용법

정석·2024년 9월 1일

TIL

목록 보기
32/40
post-thumbnail

Spring Security

Spring 서버에 필요한 인증 및 인가를 위해 많은 기능을 제공해줌으로써 개발의 편리함을 더해준다.

Security 에서 인증/인가가 된 유저 정보를 UserDetails 라는 객체에 담겨 컨트롤러로 넘어간다.


인증 및 인가 로직은 애플리케이션의 모든 부분에서 필요하므로 DispatcherServlet 이전 단계에서 Filter 가 작동 되는데 이 때 스프링 시큐리티가 작동된다.

내부 구조

  • SecurityContext: 현재 인증된 사용자 정보와 관련된 보안 컨텍스트입니다. 스프링 시큐리티는 SecurityContext를 사용하여 현재 사용자가 누구인지, 어떤 권한을 가지고 있는지를 추적합니다.

  • Authentication: 인증된 사용자의 정보를 나타내는 인터페이스입니다. 사용자가 로그인하면 Authentication 객체가 생성되어 SecurityContext에 저장됩니다. 이 객체에는 사용자의 이름, 비밀번호, 권한 등의 정보가 포함됩니다.

  • GrantedAuthority: 사용자가 가지고 있는 권한을 나타냅니다. 예를 들어, "ROLE_USER"나 "ROLE_ADMIN" 같은 권한을 의미합니다.

  • UserDetailsService: 사용자 정보를 가져오는 데 사용되는 인터페이스입니다. 주로 데이터베이스에서 사용자 정보를 로드하고 이를 Authentication 객체로 변환하는 역할을 합니다.

  • PasswordEncoder: 사용자의 비밀번호를 암호화하는 인터페이스입니다. 스프링 시큐리티는 비밀번호를 안전하게 저장하고 비교하기 위해 다양한 암호화 방법을 제공합니다.

  • Filter: 스프링 시큐리티는 여러 개의 필터로 구성된 필터 체인(Filter Chain)을 통해 요청을 가로채고, 인증과 인가를 처리합니다. 대표적인 필터로는 UsernamePasswordAuthenticationFilter, BasicAuthenticationFilter, SecurityContextPersistenceFilter 등이 있습니다.

인증이 완료된 사용자의 상세 정보를 Security Context 에 저장한다.
따라서 인증된 사용자의 정보를 접근할 때 Security Context Holder 를 통해 접근하면 된다.

  • 예시

    @AuthenticationPricipal 어노테이션을 통해 UserDetails 로 구현된 UserDetailsImpl 에서 사용자 정보를 가져올 수 있다.

1. Spring Security 프레임워크 추가

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

build.gradle에 다음과 같이 추가한다.


2. Security Config 설정

다음과 같이 Config 파일을 통해 Bean 에 등록해야 한다.

  • @Configuration , @EnalbveWebSecurity 어노테이션 등록
  • @Bean 등록
  • formLogin 설정

0개의 댓글