Spring | security

DoItDev·2021년 8월 22일
0
post-thumbnail

What is Spring Security?

Note:

  • Spring Security 는 강력하고 고도로 사용자 정의 가능한 인증 및 액세스 제어 프레임워크이다
  • Spring 기반 애플리케이션을 보호하기 위한 사실상의 표준이다.
  • Spring Security 는 Java 애플리케이션에 인증과 권한 부여를 모두 제공하는 데 중점을 둔 프레임워크이다.
  • 모든 Spring 프로젝트와 마찬가지로 Spring Security 의 진정한 힘은 사용자 정의 요구 사항을 충족하기 위해 얼마나 쉽게 확장할 수 있는지에 있습니다.

Security 구조

스크린샷 2021-08-22 오후 7 54 58

필터 흐름

스크린샷 2021-08-22 오후 7 55 09
  • SecurityContextPersistenceFilter SecurityContextRepository에서 SecurityContext를 로드하고 저장하는 일을 담당함
  • LogoutFilter 로그아웃 URL로 지정된 가상URL에 대한 요청을 감시하고 매칭되는 요청이 있으면 사용자를 로그아웃시킴
  • UsernamePasswordAuthenticationFilter 사용자명과 비밀번호로 이뤄진 폼기반 인증에 사용하는 가상 URL요청을 감시하고 요청이 있으면 사용자의 인증을 진행함
  • DefaultLoginPageGeneratingFilter 폼기반 또는 OpenID 기반 인증에 사용하는 가상URL에 대한 요청을 감시하고 로그인 폼 기능을 수행하는데 필요한 HTML을 생성함
  • BasicAuthenticationFilter HTTP 기본 인증 헤더를 감시하고 이를
    처리함
  • RequestCacheAwareFilter 로그인 성공 이후 인증 요청에 의해 가로채어진 사용자의 원래 요청을 재구성하는데 사용됨 SecurityContextHolderAwareRequestFilter HttpServletRequestHttpServletRequestWrapper를 상속하는 하위 클래스(SecurityContextHolderAwareRequestWrapper)로 감싸서 필터 체인상 하단에 위치한 요청 프로세서에 추가 컨텍스트를 제공함
  • AnonymousAuthenticationFilter 이 필터가 호출되는 시점까지 사용자가 아직 인증을 받지 못했다면 요청 관련 인증 토큰에서 사용자가 익명 사용자로 나타나게 됨
  • SessionManagementFilter 인증된 주체를 바탕으로 세션 트래킹을 처리해 단일 주체와 관련한 모든 세션들이 트래킹되도록 도움
  • ExceptionTranslationFilter 이 필터는 보호된 요청을 처리하는 동안 발생할 수 있는 기대한 예외의 기본 라우팅과 위임을 처리함
  • FilterSecurityInterceptor 이 필터는 권한부여와 관련한 결정을 AccessDecisionManager 에게 위임해 권한부여 결정 및 접근 제어 결정을 쉽게 만들어 줌

처음시작 및 사용법

build.gradle

gradle에서 security 의존성 추가를 해준다.

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-security'
}

Java Config

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
    }
    
}

@Configuration

bean을 등록하고 있음을 명시하는 어노테이션 이다.

@EnableWebSecurity

SpringSecurityFilterChain 이 자동으로 등록이된다.

@EnableGlobalMethodSecurity

스프링 시큐리티의 메소드 어노테이션기반 시큐리티 를 활성화 하기 위해서 사용

1. securedEnabled : @Secured 애노테이션을 사용하여 인가 처리를 하고 싶을때 사용하는 옵션 (defaultValue : false)

2. prePostEnabled : @PreAuthorize, @PostAuthorize 애노테이션을 사용하여 인가 처리를 하고 싶을때 사용하는 옵션 (defaultValue : false)

3. jsr250Enabled : @RolesAllowed 애노테이션을 사용하여 인가 처리를 하고 싶을때 사용하는 옵션 (defaultValue : false)

WebSecurityConfigurerAdapter

WebSecurityConfigurer 인스턴스를 생성하기 위한 편리한 기본 클래스를 제공합니다. 구현을 통해 메서드를 재정의하여 사용자 지정할 수 있습니다.
시큐리티를 만들을때 configurer adapter 을 설정을 해준다.
configure 메소드는 httpsecurity 클래스를 가지고 세팅을 해준다.

about

스프링 공홈

profile
Back-End Engineer

0개의 댓글