[Spring Boot 2.7.0] Security + Jwt 구현 [1]

주성민·2022년 5월 31일
1
post-thumbnail

프로젝트를 시작하면 가장 먼저 진행되는 작업은 회원가입/로그인 기능이지 않을까 생각합니다.
그래서 Spring 프레임워크의 Security를 바탕으로 JWT 토큰 인증 방식을 구현해보고자 합니다.
앞서 DB 및 JPA 설정은 생략되었으니 이해하기를 바랍니다.
내 컨트롤러 구현 화면입니다.

"/login" : 로그인을 진행할 API
"/all" : 사용자 전체 목록을 가져오는 API

컨트롤러 구현 후 본격적인 Spring Security 구현을 위해 해당 라이브러리를 가져오도록 합니다.
해당 라이브러리를 가져온 후 프로젝트를 실행하게 되면 아래와 같이 스프링 시큐리티가 활성화 되어 임시 비밀번호를 발급받을 수 있습니다.
웹 접속 후 localhost:8082(기본 8080)를 들어가게 되면 해당 로그인 화면을 볼 수 있습니다.
이제 본격적인 Security 설정을 위해 SecurityConfig 클래스 하나를 생성합니다.많은 예제에서 WebSecurityConfigurerAdapter를 상속받아 사용했으나 SpringBoot 2.7.0 버전 진행 시 지원 중단되어 취소선이 그어져 있는 것을 확인할 수 있습니다.

참고자료
https://spring.io/blog/2022/02/21/spring-security-without-the-websecurityconfigureradapter

@EnableWebSecurity: SpringSecurityFilterChain자동 생성
permitAll: 무조건 접근을 허용
authenticated: 인증된 사용자의 접근을 허용

이후 처음 컨트롤러에서 설정한 API를 호출해보면
로그인은 성공적으로 수행되는 것을 확인할 수 있으나
맴버 리스트를 가져오는 API는 403에러를 반환하는 것을 확인할 수 있습니다.

우선 여기까지 구현했다면 Spring Security 설정은 되었습니다.
이후 Jwt 토큰을 이용한 인증방식을 구현해보도록 하겠습니다.


로그인 후 Token을 넣지 않았음에도 '/all'이 200을 반환하는 경우가 있어 찾아보니 SecurityFilterChain에 해당 값을 추가해야 했다.
스프링 시큐리티 세션 정책

ALWAYS: 항상 세션 생성
IF_REQUIRED: 필요시 생성
NEVER: 생성하지 않지만, 기존에 존재하면 사용
STATELESS: 생성하지 않고, 기존 존재와 상관없이 미사용

STATELESS가 Jwt 토큰 방식을 사용할 경우 지정하는 방식이라고 한다.

profile
Java Dev

0개의 댓글