1) 프로젝트 셋업
2) Firebase 초기화
3) Filter에서 인증토큰 검증하기
Controller에 접근하기 전에 먼저 Request를 인터셉트 해서 전처리 역할 및 후처리 역할을 할 수 있는데, 우리는 전처리 역할을 하게끔 만들었다.
Filter는 Spring Security 설정과 결합하면 특정 Request와 결합할때만 사용자 요청을 처리할 수 있다. 따라서, 토큰을 검증하는 Filter를 만들고 Security 요청에 따라 검증하도록 하였다.
(Client 단에서 Header에 Authorization: Bearer {FirebaseIdToken} 형태로 메세지가 온다고 가정)
FirebaseTokenFilter :
doFilterInternal를 override해서 Request가 들어오면 Header에서 토큰을 가져와서 FirebaseAuth로 토큰을 검증하고 UserDetailsService에서 사용자 정보를 가져와 SecuriyContext에 추가해주는 로직을 따르도록 하였다.
SecurityConfig :
HttpRequest를 받는 부분에 filter를 적용(addFilterBefore)하고 WebSecurity를 받는 부분에서 ignoring()에 Filter를 적용하지 않을 요청들을 추가하였다. 추가하지 않은 요청들은 FirebaseTokenFilter에서 토큰검증이 수행된다.