본문 바로가기

IT

스프링부트 카카오 소셜 로그인 2(OAuth 로그인 활성화 및 객체 등록)

728x90

스프링 시큐리티 config 파일에 .oauth2Login()만 추가해주면 활성화가 된다.

public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
                .csrf(
                        csrf-> csrf.disable()
                )
                .authorizeRequests()
                .antMatchers("/**")
                .permitAll()
                .and()
                .formLogin()
                .loginPage("/member/login") //GET
                .loginProcessingUrl("/member/login") //POST
                .and()
                .oauth2Login()  //oauth2 활성화
                .and()
                .logout()
                .logoutUrl("/member/logout");

        return http.build();
    }

활성화를 시켜준다면 이전에 만들었던 카카오 로그인 버튼이 활성화가 된다.

카카오 로그인 버튼
실행 결과

이전에 설정한 필수정보와 선택정보가 동의 항목에 포함되어 출력되는 것을 확인할 수 있다. 여기까지 정상적으로 진행했다면 이제 SecurityConfig에 OAuthUserService 객체를 등록한다. 

(SecurityConfig를 람다를 활용하여 내부 코드를 변경하고 OAuthUserService 객체를 등록한다. 사용자 정보 userInfoEndpoint를 OAuthUserService에서 처리한다.)

public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
    http
            .csrf(
                    csrf -> csrf.disable()
            )
            .authorizeRequests(
                    authorizeRequests -> authorizeRequests
                            .antMatchers("/**")
                            .permitAll()
            )
            .formLogin(
                    formLogin -> formLogin
                            .loginPage("/member/login") // GET
                            .loginProcessingUrl("/member/login") // POST
            )
            .oauth2Login(
                    oauth2Login -> oauth2Login
                            .loginPage("/member/login")
                            .userInfoEndpoint(
                                    userInfoEndpoint -> userInfoEndpoint
                                            .userService(oAuth2UserService)
                            )
            )
            .logout(logout -> logout
                    .logoutUrl("/member/logout")
            );
    return http.build();
}

OAuthUserService 클래스를 생성하되 이는 DefaultOAuth2UserService을 상속받는다.

public OAuth2User loadUser(){}

이제 로그인 정보를 받을 OAuth2User객체와 loadUser를 오버라이드 받아 OAuthUserService 클래스를 구현만 하면 카카오 로그인을 사용할 수 있다.