서블릿에 필터를 추가함으로서 서블릿 필터와 서블렛 필터의 등록 방법을 익히는 걸 목표로 한다.

SecurityConfig

Spring Security의 기본적인 디폴트 페이지를 사용. 따라서 oauth2login은 별도로 진행한다.

Oauth2Login

위의 코드에서 람다식이 사용 가능한 이유는 다음과 같다. 람다식 안의 oauth는 OAuth2LoginConfiguer이다. 즉, 앞서 해당 글에서 설명한 것처럼 람다식으로 Customizer를 대체함으로서 oauth2 로그인 과정의 일부를 커스텀 할 수 있다. 현재 코드에서는 유저가 로그인 작업을 성공적으로 마친 뒤의 과정을 커스텀할 수 있다.

Oauth2UserService

Oauth2UserService의 경우 loadUser라는 메서드를 가지고 있다. 기본적으로 받아온 토큰의 값을 파싱하여 DB의 유저와 비교한 뒤, OAuth2User를 구현한 클래스를 리턴한다. 해당 프로젝트에서 OAuth2User를 구현한 클래스는 BoardPrincipal이다. 해당 클래스는 UserDetails와 OAuth2User을 상속받는다.

Oauth2User 와 UserDetails

둘다 로그인시에 가져올 유저 정보를 담아두는 역할을 한다. Oauth2User의 경우에는 토큰에 담겨져온 정보를 Map의 형태로 정보를 가져온다.

로그인 성공을 위해서는 DB에 있는 유저 정보와 로그인한 값을 비교하는 과정과, 로그인할때 Oauth2UserRequest가 가지고 있는 정보를 이용해서 유저를 생성 및 관리 해야한다.

Oauth2UserService 구현

다음의 구현된 코드는 토큰에서 파싱한 정보를 바탕으로 DB에 있는 유저와 확인한뒤, 유저가 있다면, 관련정보를 가지고 있는 BoardPrincipal을 리턴하여, Authentication Manager가 관리할 수 있도록 도와준다. 만약 DB에 해당 정보가 없다면 별도로 암호화된 비밀번호를 생성하고, 저장한다.