프로그래밍 80

SpringbootSecurity/Springboot로 구글로그인 해보기(3)/구글 로그인 및 자동 회원가입 진행 완료

저번 포스팅에서 이어집니다. PrincpalDetails를 만든 이유는 Authentication객체에 일반 로그인을 했을 경우의 타입과 oauth를 사용해서 로그인한 경우의 타입 이 두 가지 타입을 일치시키기 위해서이다. 그럼 이제 회원 oauth 회원가입을 해보자 회원가입 여기서 attributes가 가지고 있는 정보는 아래와 같다. getAttributes {sub=105617652356040885552, name=, given_name=, family_name= , picture=https://lh3.googleuserconent.com/a/AATXAJzvxBp9CVwqOqPeThYDMDJvNPxhu , email=@gmail.com , email_verified=true , locale=ko} ..

SpringbootSecurity 2021.08.29

SpringbootSecurity/Springboot로 구글로그인 해보기(3)/Authentication객체가 가질 수 있는 2가지 타입

위 받은 정보들을 분석해 보면 registrationId로 어떤 OAuth로 로그인했는지 확인이 가능하다. Authentication객체 테스트 Authentication 를 DI(의존성 주입) 하면 Authentication객체안에 principal이 있고 이 객체는 return타입은 Object이기 때문에 user정보를 다운 캐스팅해서 호출을 하면 user의 정보를 볼 수 있다. @AuthenticationPrincipal을 통해서 세션정보에 접근할 수 있다. 즉 userDetails에 접근을 할 수 있게 된다는 얘기이다. 하지만 UserDetails타입을 가지고 있다 그렇기 때문에 아래와 같이 수정하면 user오브젝트를 받을 수 있게 된다. 그럼 이번엔 구글로 로그인하면 어떻게 되는지 확인해 보자...

SpringbootSecurity 2021.08.29

SpringbootSecurity/Springboot로 구글로그인 해보기(2)/구글 회원 프로필 정보

저번 포스팅에서 이어갑니다. 이제 구글 로그인까지는 완료했는데 후처리가 필요하다. 구글 로그인 후처리 일반적으로 구글이 구글을 완료하면 어떻게 처리가 되는지 알아야 한다. 일단 로그인을 하게 되면 1. 코드 받기(인증) 2. 액세스 토큰(권한) 3. 권한을 통해서 사용자 프로필 정보를 가져온다. 4-1. 그 정보를 토대로 회원가입을 자동으로 진행시키기도 한다. 4-2. 예를 들어 쇼핑몰을 한다고 하면 기본적인 USER정보와 더해서 추가적인 집주소, 백화점몰->(VIP 등급, 일반등급)이 필요하다. TIP 구글 로그인이 완료가 되면 코드를 받는 것이 아니다. 무엇을 받냐면 액세스 토큰+사용자 프로필 정보까지 한 번에 다 받을 수 있다. Oauth2 clinet라이브러리에서 제공해주는 기능 일단 config..

SpringbootSecurity 2021.08.29

SpringbootSecurity/시큐리티 회원가입

Security 가 적용된 로그인 시스템을 만들어 갈 것입니다. 이번 포스팅에서는 회원가입을 다뤄 보겠습니다. 먼저 view단을 간단하게 아래와 같이 구성한다. form에 action처리랑 method속성은 상황에 맞게 추가시켜준다 이제 DB 모델을 만든다. 이제 해당 모델로 만든 클래스를 jpaRepository를 상속받아서 userRepository를 만들고 컨트롤러를 만들어서 회원가입을 시켜 볼 거다 주석에 적혀있다시피 일반적인 save함수를 사용하면 시큐리티로 로그인을 할 수가 없기 때문에 config에서 설정을 좀 더 잡아줘야 한다. 주석을 참고하길 새로운 어노테이션을 하나 더 배웠다 @been 주석 참고! 위 주석에서처럼 그냥 save함수만 써서 가입을 시켰더라면 시큐리티 처리가 되지 않은 그..

SpringbootSecurity 2021.08.25

MessageConverter란?(Jackson)

자바 오브젝트와 파이썬 오브젝트가 있을 때 이 둘의 오브젝트는 서로 생김새가 다를 수밖에 없다. 그럼 이 자바 오브젝트와 파이선 오브젝트가 직접적으로 소통을 하게 되면 서로 모르는 언어로 대화하는 것과 같은 현상이 일어난다. 그래서 서로 다른타입의 언어들을 이해하기 위해서 모든 언어가 해석할 수 있는 중간 언어를 만들게 되는데 그것이 바로 중간 데이터라고 불리는 녀석들이다. JSON, XML 같은 중간 데이터가 생기게 된 배경이다 MessageConverter라이브러리(Jackson) 자바프로그램을 누군가에게 전송할 때 json데이터로 바꿔주는 것이 MessageConverter라는 것이다. 그리고 이 MessageConverter가 비단 요청할 때만 작동하는 것이 아닌 응답을 받을 때도 JSON 데이터..

Springboot 2021.08.22

톰켓이란?

시스템 콜 HTTP는 운영체제가 들고 있는 소켓이라는 것을 이용해서 만들어졌는데 만약에 프로그램이 운영체제가 들고 있는 기능을 불러서 사용하는 것을 시스템 콜이라고 한다. HTTP 기반은 소켓이다. 웹 서버란? HTTP 웹 서버는 갑이다. 쉽게 말해서 하나의 영상을 공유할 때 그 영상을 받는 쪽이 갑이 아닌 영상을 주는 쪽이 갑이 되기 때문이다. 갑이라는 건 을이 필요한 데이터를 가지고 있다는 것이다. 그래서 항상 HTTP통신은 을이 갑한테 REQUEST를 한다. 이때 REQUEST 할 때 위치를 알아야 하기 때문에 IP주소를 알아야 한다. 그리고 두 번째는 REQUST 할 때 정확한 명시가 필요하기 때문에 URL을 사용한다 URL은 자원을 요청하는 주소 그래서 갑(웹서버)은 항상 가만히 있다가 URL을..

Springboot 2021.08.20

AOP 사용해서 sentry및 Log적용

log나 sentry 같은 공통기능들은 advice에서 처리를 해야 프로그램이 엄청 심플해진다. advice파일이 하나여야한다는 법칙은 없기 때문에 상황에 따라서 공통 관심사가 생기면 추가시켜주면 된다. log 남기기 info는 정상적일 때 실행되는 정보를 알려주는 log 문제가 생겼을 때는 log.warn이나 log.error를 남긴다. 개발을 할 때는 log.debug를 사용한다. debug는 debug모드에서만 실행된다. 로그에는 레벨이란 게 있다 1. error 2.warn 3.info 4.debug 이렇게 있는데 만약에 로그 레벨을 info로 해놓으면 info이상만 뜬다. 그럼 이 해당 로그가 뜰 때마다 파일로 남기고 싶을 때는 어떻게 할까? 위 파일을 만든다. 아래 코드는 그냥 복붙 해서 사용..

Springboot 2021.08.13

AOP개념

Validation체크 spring을 좀 하다 보면 유효성 검사를 하는 validation체크를 할 수밖에 없다. 사용자가 어떤 데이터를 던질지 모르고 혹시 모를 서버의 공격에 대비한 체크들을 해야 한다. 그럼 이때 예를 들어 request요청이 왔다고 했을 때 이데이 터가 쿼리 스트링이든 httpbody든 이 데이터를 filter에서 거르도록 해야 한다. 예를 들어서 post:/user에 username과 password요청이 왔다. 그럼 서버는 /user라는 http메서드와 uri를 디스페처가 감지를 하고 /user주소가 있는 함수를 찾는다. 그럼 자연스럽게 해당 함수의 매개변수를 확인한다. 이때 만약에 매개변수로 Strig username, String password, String Phone 이렇..

Springboot 2021.08.13

체크박스를 통해서 자바스크립트로 fetch요청하기

지금 하고 있는 쇼핑몰 만들기 프로젝트에서 체크된 항목들을 삭제해야 하는 기능이 있다. 그럼 하나의 값을 받아오는게 아니라 체크가 된 모든 값들을 받아와야 한다. 체크박스의 name값으로 자바스크립트에서 해당 체크박스의 체크 여부 등을 알 수 있는데 이때 체크박스의 벨류 값으로 찾아야 하는 db의 아이디 값을 value로 설정해줌으로써 위 checkNull의 값은 체크가 된 컨탠츠의 db데이터의 pk값이 들어가게 된다. 그리고 this.value로 값을 옮겨서 출력했다. 자바스크립트에서 반복해서 요청을 하도록 로직을 짜 놨기 때문에 봔환값없이(void)로 삭제만 하도록 기능을 설정했다.

Springboot 2021.08.11