Map이라서 key값으로
서버끄고 패키지 만들기
Optional<T>
제네릭안에 objectrk 만약에 User면 Optional이 User을 감싸고 있고
get -> user가 null이 아닐때만 써야 함. 아니면 nullPointException....
isPresent() -> 있
orElseGet -> 빈객체면 니가 하나 만들어서 리턴.
orElseThrow -> Exection 던져줌.
isPresent() ->
-> 함수(화살표함수) : 한번만 쓸 때, 타입 신경안쓰고 만들 수 있다.
PrincipalOauth2UserService
하나의 함수로 하기 힘들어서 다음 함수에 넘겨서 끝냄
ClientRegistration에 리다이렉션 받은 정보가 다 있음
여기서 중요한건 registrationId 이걸로 파싱을 함
oauth2Login을 하면 해당 서비스를 실행하게 한다.
원래는 new로 생성했었음.
그러기 위해서는 해당 클래스에서 필드멤버로 DI를 해놔야함.
OAuth2를 이용해서 연결할 사이트들이 다르다.
구글과 페이스북은 같고
네이버와 카카오는 다르기때문에 interface를 이용하면 똑같은 메소드를 불러서 처리가 가능함.
구글과 페이스북으로 로그인이 가능하게 만듬
네이밍 쿼리 findByEmail(String email)
네이티브 쿼리 @Query로 직접 짜는것을 추천함
User에 3가지 @ 추가
Optional, 옵셔널, 옵션
Optional 지향해야 한다.
옵셔널로 감싸줘서 바꿔주는애는 JPA이다.
사용 방법 3가지
1. get
쓸 수 있는 유일한 방법이 있다.
2. orElseGet - 추천
3. orElseThrow
방법 3가지인데 컨트롤+Q로 문서보면 자세히 알게됨
Exception
여기서 NullPointerException.class와 IllegalArgumentException.class를 캐치해서
제어 할 수 있음
README.md에 JPA에 관련된거 사진 있음.
USER에 추가
서비스
userOptional은 절대 null값은 리턴 안됨->옵셔널
빌더 -> username이 중복되지 않게 provider+providerId로 만듬
password가 null이라도 상관없는 이유
ID랑 PW가 날라가는데 시큐리티 필터가 낚아채서 토큰을 만드는데 manager한테 넘어간다
auth를 만들어야하는데 detail을 호출하고 username이 있는지만 확인함
시큐리티가 db에 있는지 내부적으로 확인함. 이때 null값이면 암호화되지 않아서 로그인이 안됨.
로그인 타입을 따로 만들면 PrincipalDetails랑 Oauth2details로 나뉘는데
컨트롤러에서 @AuthenticationPrincipal으로 찾을수 있으나 일반 로그인과 Oauth 로그인을 나눠야하는데
이렇게 2개로 나뉘는 것보다는 같은 타입으로 선언하면
컨트롤러에서 하나의 타입으로만 받아도 동적으로 2개를 받을 수 있다.
어찌보면 오버로딩 개념..
Provider 저장하는 방법 2가지
자바 파일 저장
yml
최종적으로 회원정보를 받을때 구글이나 페이스북은 KEY=VALUE 형태로 준다.
마지막으로 response 될때 최종 KEY값은 'RES'이게 MAP 데이터이다.
네이버 같은 경우는 마지막에 회원 정보를 던져줄때 'response'로 던져줌 + JSON
옥타 - 전세계 모든 포털을 하나로 묶음
yml에서 최초! create는 매번 drop하고 만듬, update는 기본에 있는걸 수정함, 개발이 끝나면 none
'Spring Boot' 카테고리의 다른 글
OAuth 네이버 로그인 (0) | 2020.08.04 |
---|---|
Optional (0) | 2020.08.04 |
1. OAuth2.0 구글 로그인 (0) | 2020.08.03 |
spring - 시큐리티 + OAuth+JWT (0) | 2020.08.03 |
스프링 트랜잭션 롤백하기 (한 Transaction 안에 commit 해야하는 함수가 여러개 일때) (0) | 2020.08.03 |