Spring Boot (31) 스프링 시큐리티 실습 돌아보기

넙데데맨·2022년 12월 30일
0

사용자 정보

UserDetails 엔티티

UserDetails 인터페이스를 상속하는 User 엔티티를 생성한다.

UserDetails(interface)

Spring Security에서 사용자의 정보를 담는 인터페이스
인터페이스 구성 확인

Repository 구현

id 값을 받아 User 객체를 받아오는 메소드를 구현한다.

UserService 서비스 클래스

UserDetailsService(interface)

Spring Security에서 username을 받아 UserDetails 객체를 반환하는 인터페이스

UserDetails loadUserByUsername()

username을 받아 userDetails 객체를 반환하는 메소드

토큰 생성, 인증

JWTTokenProvider

UserDetailsService에서 User 정보를 가져와서 해당정보를 갖고 토큰을 생성하는 클래스
JwtTokenProvider 코드

String createToken()

userid와 권한 목록을 갖고 토큰을 생성하는 메소드
Claims 객체는 JWT 토큰에 값을 넣기 위해 사용한다고 한다.
Jwts.builder() 메소드를 사용해 토큰 내용 부분을 채워준다.

Authentication getAuthentication()

getUsername()을 이용해 sub값을 받아 이를 이용해 UserDetails 정보를 받아온 후 SecurityContextHolder에 저장할 Authentication 생성

String getUsername()

Jwts.parser()를 통해 secretKey를 설정하고 이를 이용해 클레임을 추출해 넣었던 토큰의 sub 값을 추출한다.

String resolveToken()

헤더 값으로 전달된 토큰 값을 가져와서 리턴하는 메소드

boolean validateToken()

토큰의 기간이 만료되었는지 체크하는 테스트

JWTAuthenticationFilter

JWTAuthenticationFilter
OncePerRequestFilter를 상속받는 클래스
JWT 토큰으로 인증하고 SecurityContextHolder 에 추가하는 필터 설정 클래스

doFilterInternal()

  1. 헤더값으로 전달된 토큰 값을 받아온다.
  2. 토큰의 유효성 체크(null 체크, 유효기간)
  3. 유효성 체크 후 getAuthentication() 메소드 실행해서 Authentication 객체 생성
  4. Authentication 객체를 SecurityContextHolder에 추가
    doFilter() 메소드 이전에 있는 메소드들은 서블릿 실행 이전에 수행된다.

시큐리티 설정

SecurityConfiguration

시큐리티 설정 클래스
스프링 시큐리티의 적용 범위, 예외처리 등을 어떻게 처리할 것인지 설정한다.

AccessDeniedHandler

SecurityConfiguration에서 권한 확인 중 예외가 발생할 시 실행되는 클래스
exception uri로 리디렉트되어 예외 메소드가 호출된다.

AuthenticationEntryPoint

SecurityConfiguration에서 인증 과정 중 예외가 발생할 시 실행되는 클래스
예외처리를 위해 response를 생성해서 값을 채운 후 클라이언트에게 응답하게 된다.

회원가입, 로그인 처리

SignService

로그인과 회원가입을 처리할 클래스

SignUpResultDto signUp()

전달받은 정보로 User 객체를 만들어 저장한다.
그 후 객체 저장에 결과를 Dto에 저장한다.

SignInResultDto signIn()

전달받은 정보와 DB 정보를 대조한 후 패스워드가 일치하면 토큰을 생성해 Dto에 추가로 저장한다.

void setSuccessResult()

성공 시 결과를 저장하는 메소드

void setFailResult()

실패 시 결과를 저장하는 메소드

CommonResponse

setSuccessResult(), setFailResult()의 데이터 설정을하기 위한 enum 클래스

PasswordEncoderConfiguration

패스워드를 암호화해서 저장하기 위해 암호화를 해주는 클래스

SignController

SignInResultDto signIn()

로그인 메소드

SignUpResultDto signUp()

회원가입 수행 메소드

void exceptionTest()

예외발생 시 처리하는 메소드

ResponseEntity<Map<String,String>> ExceptionHandler()

에러 발생 시 응답메시지, 코드등을 전달하는 메소드

인증 보안 파트는 반복해서 봐도 이해가 힘들었다.

책 자체가 A를 하려면 B를 이용해야 한다. 왜냐하면~ 이렇게 설명해주기 보다
B를 이용해서 A를 만든다. 라는 뉘앙스가 강해서 그냥 왜 이렇게 하는 지는 알아서 찾아봐야 하고 생각보다 구글에 정보가 많지도 않아서 너무 힘들었던 파트

다른 파트들도 지금 다시하면 또 까먹었겠지만 유난히 이 파트가 고생시킨 것 같다.

이걸로 책 한 권이 다 끝났지만 말 그대로 겉핥기했다. 이렇게 해서 스프링부트로 취업을 할 수 있을지 모르겠다..

profile
차근차근

0개의 댓글