프로젝트에 참고한 책: '스프링 부트와 AWS로 혼자 구현하는 웹 서비스'
1. build.gralde에 의존성 추가하기
compile('org.springframework.boot:spring-boot-starter-oauth2-client')
로그인 관련 의존성 추가
testCompile('org.springframework.security:spring-security-test')
스프링 시큐리티 의존성 추가
2. config/auth 패키지 생성 후 SecurityConfig 클래스 만들기
@EnableWebSercurity: Spring Security 설정들을 활성화 시켜준다

코드를 상세하게 분석해보려 한다
1.

h2-console 화면을 사용하기 위해 해당 옵션들을 disable 한다
2.

-authorizeRequests(): URL별 권한 관리를 설정하는 옵션의 시작점 .이게 선언되어야 antMatcher옵션을 사용할 수 있다
-antMatchers(): 권한관리 대상을 지정하는 옵션이다. URL,HTTP 메소드 별로 관리가 가능하다
-antMatchers(~).permitAll(): ~에 지정된 URL들은 permitAll() 옵션을 통해 전체 열림권한을 주었다.(css,js있는 것으로 보아 모든 화면은 볼 수 있는 것 같다)
-antMatchers("/api/v1/**"): "/api/v1/**" 주소를 가진 API는 USER 권한을 가진 사람만 가능하도록 한다
-anyRequest(): 설정된 값들 이외 나머지 URL들을 나타낸다
3.

.logout().logoutSuccessUrl("/): 로그아웃시 "/" URL로 이동한다
4.

-oauth2Login(): OAuth2 로그인 기능에 대한 여러 설정의 진입점이다
-userInfoEndpoint(): OAuth2 로그인 성공 이후 사용자 정보를 가져올 때의 설정을 담당한다
-userService(): 소셜 로그인 성공 시 후속 조치를 진행할 UserService 인터페이스의 구현체를 등록한다. 소셜 서비스들에서 사용자 정보를 가져온 상태에서 추가로 진행하고자 하는 기능을 명시할 수 있다
3. CustomOAuth2UserService
구글 로그인 이후 갖온 사용자의 정보(email.name,picture etc)들을 기반으로 가입 및 정보수정, 세션 저장 등의 기능을 지원하는 클래스이다.
여기는 몇번을 봐도 잘 모르겠다,, 로그인 부분 중 가장 어려운 부분. 언젠가 이해가 오는 날이 오겠지?

loadUser() 코드를 상세하게 분석해 본다

1.

delegate 뜻이 대리인이던데, 아마 무언가를 대리하는 객체인 것 같다. OAuth2UserService<OAuth2UserRequest, OAuthUser>는 implementation한 인터페이스인 것 같다
oAuth2User를 delegate에서 useRequest를 가지고 loadUser를 가져온건가(?)
2.

-registrationId :현재 로그인 진행중인 서비스를 구분하는 코드이다(구글을 이용하면 구글, 네이버를 이용하면 네이버를 가리킨다)
3.

-userNameAttributeName: OAuth2 로그인 진행 시 키가 되는 필드값을 이야기 한다. PrimaryKey와 같은 의미.
4.

-OAuthAttributes: OAuth2UserService를 통해 가져온 OAuth2User의 attribute를 담은 클래스이다.
다른 소셜 로그인도 이 클래스를 이용한다
-OAtuhAttributes.of(registrationId,userNameAttributeName,oAuth2User.getAttributes());
궁금한 점: attribute라고 하면 속성인데, 컬럼을 말하는건가??
5.

구한 attributes를 saveOrUpdate() 메소드로 user에 저장한다
httpsession.setAttribute()로 user의 사용자 정보를 세션에 저장한다
6.

7.

'개인프로젝트 > My Book' 카테고리의 다른 글
[개인프로젝트 #1] 6. 어노테이션 기반으로 개선하기 (0) | 2022.01.28 |
---|---|
[개인프로젝트 #1] 5. 로그인 구현(Dto) (0) | 2022.01.27 |
[개인프로젝트 #1] 5. 구글,네이버 로그인 기능 구현 (0) | 2022.01.27 |
배포 전에 프로젝트 하면서 아쉬웠던 점들 (0) | 2022.01.27 |
[개인프로젝트 #1] 4. 게시글 수정 View 생성 (0) | 2022.01.27 |