OAuth2UserService
- CustomOAuth2UserService
@Service
public class CustomOAuth2UserService extends DefaultOAuth2UserService {
//DefaultOAuth2UserService OAuth2UserService의 구현체
@Override
public OAuth2User loadUser(OAuth2UserRequest userRequest) throws OAuth2AuthenticationException {
OAuth2User oAuth2User = super.loadUser(userRequest);
System.out.println(oAuth2User.getAttributes());
String registrationId = userRequest.getClientRegistration().getRegistrationId();
OAuth2Response oAuth2Response = null;
if (registrationId.equals("naver")) {
oAuth2Response = new NaverResponse(oAuth2User.getAttributes());
}
else if (registrationId.equals("google")) {
oAuth2Response = new GoogleReponse(oAuth2User.getAttributes());
}
else {
return null;
}
//추후 작성
}
}
OAuth2Response
- 네이버 데이터 : JSON
{
resultcode=00, message=success, response={id=999999999, name=망구}
}
- 구글 데이터 : JSON
{
resultcode=00, message=success, id=999999, name=망구
}
- DTO > 인터페이스 OAuth2Response
public interface OAuth2Response {
//제공자 (Ex. naver, google, ...)
String getProvider();
//제공자에서 발급해주는 아이디(번호)
String getProviderId();
//이메일
String getEmail();
//사용자 실명 (설정한 이름)
String getName();
}
- dto > NaverResponse
public class NaverResponse implements OAuth2Response {
private final Map<String, Object> attributes;
public NaverResponse(Map<String, Object> attributes) {
this.attributes = (Map<String, Object>) attributes.get("resonse");
}
@Override
public String getProvider() {
return "naver";
}
@Override
public String getProviderId() {
return attributes.get("id").toString();
}
@Override
public String getEmail() {
return attributes.get("email").toString();
}
@Override
public String getName() {
return attributes.get("name").toString();
}
}
- dto > GoogleResponse
public class GoogleResponse implements OAuth2Response {
private final Map<String, Object> attributes;
public GoogleResponse(Map<String, Object> attributes) {
this.attributes = attributes;
}
@Override
public String getProvider() {
return "google";
}
@Override
public String getProviderId() {
return attributes.get("sub").toString();
}
@Override
public String getEmail() {
return attributes.get("email").toString();
}
@Override
public String getName() {
return attributes.get("name").toString();
}
}
OAuth2UserService 등록 : SecurityConfig
- SecurityConfig
@Configuration
@EnableWebSecurity
public class SecurityConfig {
private final CustomOAuth2UserService customOAuth2UserService;
public SecurityConfig(CustomOAuth2UserService customOAuth2UserService) {
this.customOAuth2UserService = customOAuth2UserService;
}
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.csrf((csrf) -> csrf.disable());
http
.formLogin((login) -> login.disable());
http
.httpBasic((basic) -> basic.disable());
http
.oauth2Login((oauth2) -> oauth2
.userInfoEndpoint((userInfoEndpointConfig -> userInfoEndpointConfig
.userService(customOAuth2UserService))));
http
.authorizeHttpRequests((auth) -> auth
.requestMatchers("/", "/oauth2/**", "/login/**").permitAll()
.anyRequest().authenticated());
return http.build();
}
}
출처
https://www.devyummi.com/page?id=66928a90ee60059dc5c2dc6c
'Spring Security > OAuth2' 카테고리의 다른 글
스프링 OAuth2 클라이언트 세션 10 : 유저 정보 DB 저장 (0) | 2025.01.09 |
---|---|
스프링 OAuth2 클라이언트 세션 9 : 응답 데이터로 로그인 완료 (0) | 2025.01.08 |
스프링 OAuth2 클라이언트 세션 7 : 구글 소셜 로그인 신청 (0) | 2025.01.08 |
스프링 OAuth2 클라이언트 세션 6 : 네이버 소셜 로그인 신청 (0) | 2025.01.08 |
스프링 OAuth2 클라이언트 세션 5 : SecurityConfig 등록 (0) | 2025.01.08 |