코딩공작소

Springboot3 실습 (3) - 스프링 시큐리티(로그인, 회원가입) 본문

어플리케이션개발/springboot실습

Springboot3 실습 (3) - 스프링 시큐리티(로그인, 회원가입)

안잡아모찌 2024. 4. 2. 19:36

스프링 시큐리티

인증과 인가

인증이란 사용자의 신원을 입증하는 과정. 즉, 누구인지를 확인

인가란 권한을 확인하는 것

 

스프링 시큐리티를 통해 인증과 인가를 편하게 구현할 수 있다.

스프링 기반 애플리케이션의 보안을 담당하는 하위 프레임워크로, CSRF공격, 세션 고정 공격을 방어해주고, 요청 헤더도 보안 처리를 해주므로 개발자가 보안 관련 개발을 하는 부담을 줄여준다. 기본적으로, 필터 기반으로 동작한다.

 

UsernamePassworedAuthenticationFilter, FilterSecurityInterceptor

그 중, 중요한 필터인데, 각각 인증 요청을 위임하는 인증 관리자 역할과 접근 제어 결정을 하는 관리자 역할을 한다.

(* SecurityFilterChain에 대하여 궁금하면 검색!)

 


스프링 시큐리티의 폼 로그인 과정

  • 1 : 아이디와 패스워드 입력하면 요청으로 정보가 전달되어 AuthenticationFilter에서 유효성 검사
  • 2 : 검사가 끝나면 실제 구현체를 만들어서 넘겨줌
  • 3 : 전달받은 인증용 객체 토큰을 매니저로 넘김
  • 4 : 토큰을 Provider로 넘김
  • 5 : 서비스 단에서 아이디를 통해 UserDetails를 만들어서 Provider로 전달하는 매개체 역할을 함
  • 6 : 디비에서 사용자 정보를 가져옴
  • 7 : 입력정보와 디비에서 가져온 정보를 비교해 실제 인증 처리를 함
  • 8 ~ 10 : 인증이 완료되면 SecurityContextHolder에 Authentication을 저장하고, 성공 여부에 따라 AuthenticationSuccessHandler, AuthenticationFailureHandler 핸들러를 실행

 

 

 


회원 도메인 만들기

 

의존성 주입

  • 스프링 시큐리티를 사용하기 위한 스타터
  • 타임리프에서 스프링 시큐리티를 사용하기 위한 의존성 추가
  • 시프링 시큐리티를 테스트 하기 위한 의존성 추가

 

회원 엔티티

엔티티를 설정하고 UserDetails를 상속받아서 오버라이드 함수를 구현한다.

 

 

리포지토리 생성

 

 

 

서비스 메서드 생성

 

 

 

시큐리티 설정하기

실제 인증 처리를 하는 시큐리티 설정 파일을 작성해야 함. 그리고 같은 패키지 내에 config 패키지에 새로 만들어서 생성해야 함.

파일 위치

 

여기는 함수 하나씩 정리해보겠다.

ignoring() 함수는 시큐리티 기능을 사용하지 않는 함수이고, 정적 리소스가 있는 곳과 h2 데이터를 확인하는 url대상들은 비활성화하는 함수이다.

 

특정 HTTP 요청에 대한 웹 기반 보안을 구성한다. 특정 경로에 대한 액세스를 설정하며, 위의 코드에서는 로그인, 사인업, 유저 요청으로 오면 인증/인가 없이 접근 할 수 있게 된다. 그리고 위의 설정한 이외의 요청에 대해서 인증이 접근할 수 있도록 설정한다.

로그인/로그아웃의 페이지와 성공 시 이동할 페이지를 설정하고, 로그아웃 이후 세션을 전체 삭제 할지 여부도 세팅해준다. CSRF설정도 설정할 수 있다.

 

 

인증관리자 관련설정과 사용자 정보 서비스 설정을 한다.

 

패스워드 인코더 빈 등록

 

 


회원가입 구현

DTO 를 만들어 준다.

 

 

서비스를 만들어주고 사용자의 이메일과 인코딩된 패스워드를 저장해준 후, 아이디를 리턴한다.

 

 

컨트롤러 단

 

 

뷰 컨트롤러 단

 

 

 

로그아웃 요청을 하면 로그아웃을 담당하는 핸들러가 로그아웃 메서드를 호출해서 로그아웃 한다.

 

 

테스트

articles 요청을 날리게 되면 인증된 사용자만 들어갈 수 있는 페이지 이므로 로그인 페이지로 리다이렉트 된다.

 

 

 

 

 

회원가입을 진행해본다.

 

로그인에 성공했다. !!!

 

 

H2 콘솔에서 유저 데이터를 보면 암호화된 패스워드로 회원 정보가 잘 저장된 것을 확인할 수 있다.

 

 

로그아웃 기능도 잘 수행되며, 로그아웃 시 세션도 초기화 되는 것을 확인 할 수 있다.!!