프로젝트에 참고한 책: '스프링 부트와 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.

+ Recent posts