[스프링 부트 핵심 가이드] 정리 8주차

AmeriKano·2023년 7월 9일
0

책 링크

매주 스프링 부트 핵심 가이드 를 읽으며 이전에 궁금했거나, 새롭게 알게 된 내용들을 정리했다.
(이번 주는 13장을 읽었다.)


스프링 시큐리티

위 그림은 스프링 시큐리티의 보안 필터체인 중 기본값인 UsernamePasswordAuthenticationFilter 를 통한 인증 과정이다. 위 필터는 접근 권한을 확인하고 인증이 실패하면 로그인 폼을 보내는 역할을 수행한다. 화면이 없는 어플리케이션의 경우 다른 필터에서 인증 및 인가 처리를 수행해야 하는데, 그러한 인증 방법으로 JWT 토큰을 활용한 방법이 있다.

JWT 토큰을 이용한 필터 구현 순서

토큰을 생성하고 정보를 해석해 인증을 수행하는 클래스 -> 이 클래스를 활용한 필터

SecurityConfiguration 구현

위에서 구현한 필터는 스프링 시큐리티를 적용하기 위한 컴포넌트이다. 다음은 WebSecurityConfigureAdapter 를 상속받는 Configuration 클래스를 구현하는 것이다. configure() 메소드에 작성될 수 있는 설정 코드는 다음과 같다. 모든 설정은 전달받은 HttpSecurity 에 설정하게 된다.

  • httpBasic.disable()
    UI를 사용하는 기본값을 가진 시큐리티 설정을 비활성화한다.

  • csrf.disable()
    CSRF(사이트 간 요청 위조, 웹 어플리케이션의 취약점 중 하나로 특정 페이지의 보안을 취약하게 하는 방법이다.) 보안을 비활성화한다. 브라우저 사용 환경이 아니라면 비활성화해도 문제가 되지 않는다.

  • sessionManagement().sessionCreationPolicy(SessionCreationPolicy)
    REST API 기반 어플리케이션의 동작 방식을 설정한다. SessionCreationPolicy 에는 세션을 사용함에 따라 결정한다.

  • authorizeRequest()
    어플리케이션에 들어오는 요청에 대한 권한을 체크한다. antMatcher()antPattern 을 통해 권한을 설정한다. permitAll(), antMatchers(HttpMethod.GET, "/api/**).permitAll()", .anyRequest().hasRole("ADMIN") 등 요청별, 링크별 다양한 권한 설정이 가능하다.

  • exceptionHandling().accessDeniedHandler()
    권한을 확인하는 과정에서 통과하지 못하는 예외가 발생하면 예외를 전달한다.

  • exceptionHandling().authenticationEntryPoint()
    인증 과정에서 예외가 발생하면 예외를 전달한다.

profile
똑똑한 사람이 되게 해주세요

0개의 댓글