스프링시큐리티 세팅

최승아·2021년 11월 8일
0


[SpringBoot] Spring Security 처리 과정 및 구현 예제

출처: https://mangkyu.tistory.com/77 [MangKyu's Diary]

1. dependency 추가

  • Maven 이용

2. Java Configuration

  1. @Configuration : 설정 파일을 만들기 위한 어노테이션 or Bean을 등록하기 위한 어노테이션
  2. @EnableWebSecurity : Spring Security 설정할 클래스라고 정의 / SpringSecurityFilterChain이 자동으로 포함 (필터 등록)
  3. @AllArgsConstructor : 모든 필드 값을 파라미터로 받는 생성자를 만듦

  • 작성후, configure를 오버라이딩 하여 접근권한을 작성
  • 스프링 시큐리티 룰을 무시하게 하는 Url 규칙 (등록하면 규칙 적용 안됨)
  • 파라미터 WebSecuriy web는 보안예외처리(정적리소스,HTML) / FilterChainProxy를 생성하는 필터
  • static 디렉터리의 하위 파일 목록은 인증 무시 ( = 항상통과 ) / 파일 기준은 resources/static 디렉터리
  • 파라미터 HttpSecurity http는 HTTP요청에 대한 웹 기반 보안을 구성하여 처리
  • antMatchers() : 특정 리소스에 대해서 권한을 설정
  • addFilter() : 필터 등록
  • csrf().disable() : csrf 보안 설정을 비활성화 .disable() / 해당 기능을 사용하기 위해서는 프론트단에서 csrf토큰값 보내줘야함
  • AuthenticationManagerBuilder를 통해 인증 객체를 만들 수 있도록 제공
  • auth.authenticationProvider(this.authProvider); : 로그인 프로세스가 진행될 provider

3. JwtAuthenticationFilter 구현

  • Form Login시 걸리는 필터
  • UsernamePasswordAuthenticationFilter를 상속하며, 사용자가 Form으로 입력한 로그인 정보를 인터셉트해서 AuthenticationManager에게 Authentication 객체를 넘겨줌

  • 위에서 id, pwd 토큰 생성해서 인증 처리를 위해 AuthenticationManager에게 토큰(UsernamePasswordAuthenticationToken) 전달
  • AuthenticationManager는 등록된 AuthenticationProvider(들)을 조회하여 인증 요구

4. AuthenticationProvider

  • AuthenticaionProvider는 인증 프로바이더로 로그인시 사용자가 입력한 아이디와 비밀번호를 확인하고 해당 권한을 주는 클래스
  • 화면에서 입력한 로그인 정보와 DB에서 가져온 사용자 정보를 비교해줌
  • AuthenticationManager에게 전달받은 토큰값으로 userId와 pwd를 꺼내와서 해당 멤버가 있는지 DB로 조회
  • 조회가 되면 멤버에게 권한을 부여
  • AuthenticationManager는 UsernameAuthenticationToken AuthenticationFilter로 전달
  • AuthenticationFilter는 전달받은 UsernameAuthenticationToken을 LoginSuccessHandler로 전송하고, (실패시, LoginFailHandler로 전송) 최종적으로 SecurityContextHolder에 저장

5. UserDetails

  • Member DTO에 implement UserDetails 👉 스프링 시큐리티의 인증정보를 담기 위해서는 스프링시큐리티에서 제공하는 UserDetails의 인터페이스 상속

  • 서비스단에 정의된 메소드로 실제 Spring security에서 Member 정보를 읽을때 사용

6. Handler (Custom)

  1. AuthenticationSuccessHandler : 로그인 성공
  2. AuthenticationFailerHandler : 로그인 실패
  3. LogoutSuccessHandler : 로그아웃
  4. AccessDeniedHandler : 접근제한

참조: https://devuna.tistory.com/59?category=917334 | { 튜나 개발일기 }

profile
⭐ 개발 정리 공간 ⭐

0개의 댓글