SlideShare a Scribd company logo
1 of 40
스프링 시큐리티 
+소셜+JPA 
(JAVA CONFIG)정리 
---------- 
1 
https://fb.com/me.adunhansa 
https://twitter.com/arahansa 
http://adunhansa.tistory.com/ 
ABOUT 
CONTACT 
SOURCE 
1
• 본 글은 Petri 라는 외국의 개발자분께서 쓰신 글을 번역한 글을 
조금 더 알기 쉽게 ppt로 정리하였다. 
역자가 아직 스프링 시큐리티와 소셜에 익숙하지 않으며, 
JavaConfig 설정도 익숙하지 않아서 애로사항이 많아 
• 정리할겸 만들어봤다. 번역글은 
http://adunhansa.tistory.com/192 에 있으며 
번역글이 좀 많고 읽으며 복붙해도 이해가 바로 잘 안되서 
일단 둘러보기정도용도로 
본 ppt는 쓰일 것이다. 
• 원래 글작성자분=> 
• 블로그는 http://www.petrikainulainen.net/ 
0. 들어가기앞서 2
아라한사 
----------------------- 
-------------------------------------------- 
국내에도 브로그래머문화가 확산되기를 바라며 이것저것.. 관심만 많음-.- 
1. 작성자 소개 3
• 자 들어가기 앞서서 크게 뭐뭐가 있는지 한번 
살펴보도록 하겠다. 
미리 큰 밑그림을 그려두고 소스를 복붙할때마다 
• 이게 어디서 어떻게 작동하는지 알아두면 좋을 
것같다는 생각이다. 
• 일단 패키지가 뭐 뭐가 있는 한번 살펴보겠다. 
• 자세한 내용은 
http://adunhansa.tistory.com/192 참조 
2. 환경설정 – 들어가기 앞서 4
2. 환경설정 – 들어가기 앞서 5
6 
• 여기까지는 잡다한 설정과 
• jsp 파일들 이 있는 곳.. 
• 아. 뭐가 이리 많어~_~ 
• 하나 하나 알아보자. ㅎㅎ 
2. 환경설정 – 들어가기 앞서
7 
• 아차, 자 본 ppt를 보는 데 있어서 큰 뿌리? 
맥이라고 할만한 것은. 
일반전통적방식과 소셜기능으로 가입&로그인하는 
경우가 있으니 스프링에서 이 두 가지 경우를 
생각해야 한다는 것이다. 
• 따라서 인터페이스도 두가지 경우로 나뉘며, 
가입클래스도 두 가지 경우를 분기혹은 다른 
클래스로 나눴던 것같다(기억에..아마도?;;)
8 
만드는 순서. 일단 
ExampleUserDetail 
RepositoryUserDetailService 
UserRepository 
User 
SimpleSocialUserDetail Service 
설정부터 들어갈 줄 알았는데, 
이런 작업이 먼저 들어가더라. 
2. 환경설정 –
9 
• 인증과정에서 세가지 컴포넌트가 필요하다고 
하는데 
1. 인증된 유저세부사항을 담을 클래스 
2. UserDetailService 인터페이스 
3. SocialUserDetailService 인터페이스 
이다. 
• 1번의 내용은 UserDetails 와 
SocialUserDetails 로 나는데 이는 
SocialUser라는 클래스가 가지고 있으니 
이를 확장해서 쓰면 된다고 한다. 
2. 환경설정
• 대략 이런 느낌의 ExampleUserDetails 를 
만든다. 
만드는 순서. 일단 
ExampleUserDetail 
RepositoryUserDetailService 
UserRepository 
User 
SimpleSocialUserDetail Service 
2. 환경설정 10
• UserRepository를 가지고서 
또 구현 
클래스를 
만든다^^ 
만드는 순서. 일단 
ExampleUserDetail 
RepositoryUserDetailService 
UserRepository 
User 
SimpleSocialUserDetail Service 
2. 환경설정 11
만드는 순서. 일단 
ExampleUserDetail 
RepositoryUserDetailService 
UserRepository 
User 
SimpleSocialUserDetail Service 
소셜기능도 유저디테일서비스를 
이미 있는 스프링의 
인터페이스등을 이용해서 만든다. 
2. 환경설정 12
만드는 순서. 일단 
ExampleUserDetail 
RepositoryUserDetailService 
UserRepository 
User 
SimpleSocialUserDetail Service 
유일한 엔티티인 
유저 클래스도 만든다. 
2. 환경설정 13
14 
자 이제 설정~~ 
들어간다~~~ 
<=Web.xml 인듯하다 
<=applicationContext 
<=Datasource와 트랜잭션매니져, 영속화 관련 빈설정들 
<= 시큐리티 설정 
<= 소셜 설정 
<= dispatcherServlet 설정이 들어가는 곳인듯하다! 
2. 환경설정 – 들어가기 앞서
• 영속콘텍스트 설정이다. 영속 단어가..입에 잘 안 
붙는데.. 디비저장부분.. 뭐..이런 느낌이다.;; 
• 아웃라인이 더 나아보인다. 데이터소스, 
트랜잭션매니져, 엔티티매니져팩토리 
2. 환경설정- 영속 클래스 15
• 시큐리티 콘텍스트 설정.. 
빈으로는 패스워드인코더, 소셜디테일서비스, 
유저디테일서비스가 있고 
configure 로 보안설정들을 한다. 
2. 환경설정- 시큐리티 클래스 16
• 소셜 콘텍스트는 소셜 키설정등을 한다. 여기서 봐야할 것이 
JdbcUsersConnectionRepository 였는데, 이것이 
userconnection 이라는 테이블에 소셜키등을 저장한다. 
2. 환경설정- 소셜 콘텍스트 17
• dispatcherServlet에 들어갈 내용을 자바설정으로 
이렇게 했다. 비교적 간단한 내용들이므로 생략. 
2. 환경설정- 웹앱콘텍스트 18
• 애플리케이션콘텍스트 설정이다. 지금까지 설정했던 
것들과 properties와 메시지등등을 모두 불러온다. 
2. 환경설정- applicationContext 19
• 스프링 xml 설정에서 web.xml 에 
applicationContext.xml 과 각종 
Character설정등등을 해준 기억이 있을 것이다. 그것을 
요런 식으로 자바설정을 하더라~~~ 
2. 환경설정- web.xml 대신.. 20
• 자 지금까지 환경설정을 참 많이도 했다.헥헥;; 
• 그렇다면 이제 실제 가입과 페이지등을 어떻게 구현할 지 
알아보도록 하자~~ 
• 먼저 로그인 페이지 부터^^ 
2. 환경설정- 끝^^ 21
• 익숙한 컨트롤러와, Jsp 페이지 
• Jsp에서 잘 봐야하는 부분은 
• isAnonymous()부분(생략됨)이며 
• 로그인여부로 페이지가 달라짐. 
3. 로그인&가입 - 로그인컨트롤러 22
• 익숙한 컨트롤러와, Jsp 페이지 
• Jsp에서 잘 봐야하는 부분은 
• isAnonymous()부분(생략됨)이며 
• 로그인여부로 페이지가 달라짐. 
3. 로그인&가입 - 로그인컨트롤러 23
• 자 일단 만들면, 이런 식의 페이지가 보여질 것이다. 
• 설정하느라 힘들었는데 여기서 뭔가 뿌듯함이 느껴졌지만 회원가입이 
안됐다. 회원가입을 구현해보자! 
3. 로그인&가입 - 로그인컨트롤러 24
• 회원가입을 위한 DTO객체 RegistrantionForm 이다. 
• 웹 계층에서 받아서 데이터를 전송(Data transfer) 데 쓰인다. 
• 검증도 하게 되는데 
• 자세한 설명은 블로그글 
을 보면 되겠다~ 
지금은 흐름만~ 
3. 로그인&가입 - DTO 25
• 자 이제 소셜과는 약간 다른 내용인 폼 
검증을 위한 클래스들을 얘기한다. 
• 다음 패키지의 메타인터페이스에 대한 설명이 나오기 시작한다. 
메타인터페이스를 만드는 방법은 블로그글에 참고 
• 요런 식으로 검증 
인터페이스를 만들었다~ 
• PasswordsNotEqual은 
생략 
3. 로그인&가입 – 유효성 검증 26
• 검증하는 클래스를 만들었다. ConstraintValidator 를 구현해서 
초기화시킨후에 검증하는 과정을 거쳐 boolean 값으로 리턴함. 
• 소셜+시큐리티가 주 목적이므로 검증은 패스패스;; 
3. 로그인&가입 – 유효성 검증 27
• 인증에러를 넣어주기 위한 ValidationUtil 클래스. 
첫번째 필드는 에러를 넣어주는 것이고, 
두번째 필드는 리플렉션을 이용하여서 필드의 값을 얻는 것이다. 
• 유효성 검증은 이정도로 하고, 등록 페이지 컨트롤러로 가보자(유효성 
검증 조금 토나와..ㅠㅠ) 
3. 로그인&가입 – 유효성 검증 28
• 등록페이지를 만드는 데도 일반 등록과 함께 소셜등록을 염두에 둬야 한다. 소셜을 통한 등록일 
경우 model에 DTO로서, registration 이 포함되어있는 구조이다. 
소셜코넥션을 받아서 
DTO로 변환. 코넥션이 
없으면 빈 객체 
3. 로그인&가입 – 등록페이지 29
• 앞서에서 model 에 registration 을 addAttribute 하였다. Registration 에 
signInProvider의 유무에 따라 다음과 같이 페이지가 변하게 된다. 
3. 로그인&가입 – jsp 가입폼 30
• 회원가입 페이지의 이 부분을 살펴보면 된다. 
3. 로그인&가입 – jsp 가입폼 31
• 가입처리하는 POST 부분이다. 가입 처리가 되는 부분은 createUserAccount 부분인데, 
service 를 @autowired 받은 것에서 가입처리를 한다. 실제로 돌아가는 서비스 클래스는 
RepositoryUserService 이며 이전에 만들었다. 다음 슬라이드에서 어떤 구조인지 나온다. 
• 아 그리고 SecurityUtil의 LogInUser도 잘 봐야 한다. 가입후 로그인시켜주는 기능이다. 
3. 로그인&가입 – 가입처리 32
• 대략 이런 구조이다. RegistraionForm(DTO) 가 User로 변경된다. 
3. 로그인&가입 – 가입처리 33
• 여기사 시큐리티유틸의 로그인해주는 부분이다. User를 받아서 로그인을 하는 기능이 구현되어있는 
ExampleUserDetails 로 변환을 해서 로그인을 한다. 처음에 UserDetails 와 
SocialUserDetails 가 들어있는 SocialUser 클래스를 상속했던 것을 기억하자. 
3. 로그인&가입 – 가입처리 후 로그인 34
• Db에 저장되는 용도로 쓰이는 엔티티. 모델 User 이다. DTO 와 UserDetails 클래스의 중간에 
있다고나 할까.. 자세한 설명은 생략. 블로그글 참조.; 
3. 로그인&가입 – user 모델 35
• 참조한 외국의 블로그 본 글에 순서가 이렇게 되어있어서 적는다. 서비스와 리파지토리 
3. 로그인&가입 – 서비스 36
• 에 .. 뭔가 그냥 내가 블로그글을 보면서 정리하는 식으로 만들어봤는데, 
내가 시큐리티, 자바설정, 소셜등에 익숙치 않은 상태, 
큰 그림이 없는 상태에서 블로그글을 처음 접했을 때 당장에 이해가 확 되지 않던 
것처럼 이 글도 처음 접하는 사람에게는 뭔가 .. @_@ 이러한 느낌이 오지 않을까 
싶다. 
• 다시 한번 패키지의 구조들을 떠올려보면서, 어디어디에 필요했던 건지 생각을 
해봐야겠다. 
• 그러니까 중요했던 것은 크게 설정 후 로그인 페이지 구현 
가입처리 페이지 구현, 가입구현, 폼 검증등을 했었다. 
• 시큐리티에 의해서 자동으로 요러한 주소(밑에)들이 리퀘스트 매핑된다. 
• /login/authenticate 로그인 과정은 이러한 주소가 자동으로 시큐리티에 의해 
생기고, 시큐리티가 필요로 하는 UserDetails 서비스 관련 
인터페이스를(RepositoryUserDetailsService 를 보자) 구현함으로써 
컨트롤러를 딱히 만들지 않아도 자동으로 구현이 되었다. 
4. 정리- 궁시렁.. 37
• 가입하는 과정은 시큐리티가 정한 주소를 다시 리퀘스트매핑 하여서 처리하였다. 
폼등록시 GET 과정과 POST 과정을 눈여겨보자 
– SignUpController 에서 RegistrationController 로 가고, 소셜 기능이 중간중간에 
섞여서 ProviderSignInUtils 나타났던 것을 기억하자. 
아... 지금 저는 이해가 많이 된 편이라, 쉽게 적는데 보는 분도 쉽게 이해하시길-_-; 
나름 뭔가 처음으로 소스분석을 해봐서 뜻깊네요. 
홈페이지에 소셜기능 많이많이 생기길^^ 
4. 정리 38
39 
THANK YOU ! 
arahansa 
------ 
------ 
페북 : https://fb.com/me.adunhansa 
트위터 : https://twitter.com/arahansa 
블로그: http://adunhansa.tistory.com/
------ 
------ 
페북 : https://fb.com/me.adunhansa 
트위터 : https://twitter.com/arahansa 
블로그: http://adunhansa.tistory.com/ 
arahansa 40 
출처 
Petri Kainulainen 은 소프트웨어 개발과 지속적향상에 열정과 관심을 가지고 있으며 
스프링 프레임워크의 전문가이자, Spring Data Book 의 저자이기도 합니다. 
이 링크로 가시면 그의 블로그로 가실 수 있습니다. http://www.petrikainulainen.net/ 
스프링 참고 원글 : http://www.petrikainulainen.net/programming/spring-framework/ 
adding-social-sign-in-to-a-spring-mvc-web-application-configuration/

More Related Content

What's hot

스프링 데이터 레디스 엘라스틱 발표자료
스프링 데이터 레디스 엘라스틱 발표자료스프링 데이터 레디스 엘라스틱 발표자료
스프링 데이터 레디스 엘라스틱 발표자료라한사 아
 
구글앱엔진+스프링+스프링datajpa+메이븐
구글앱엔진+스프링+스프링datajpa+메이븐구글앱엔진+스프링+스프링datajpa+메이븐
구글앱엔진+스프링+스프링datajpa+메이븐라한사 아
 
Go revel 구성_루팅_정리
Go revel 구성_루팅_정리Go revel 구성_루팅_정리
Go revel 구성_루팅_정리라한사 아
 
spring data jpa 간단한 튜토리얼
spring data jpa 간단한 튜토리얼spring data jpa 간단한 튜토리얼
spring data jpa 간단한 튜토리얼라한사 아
 
스프링 오픈소스 정리
스프링 오픈소스 정리스프링 오픈소스 정리
스프링 오픈소스 정리라한사 아
 
스프링 Generic autowired 로 구현하는 제너릭 컨트롤러 이야기
스프링 Generic autowired 로 구현하는 제너릭 컨트롤러 이야기스프링 Generic autowired 로 구현하는 제너릭 컨트롤러 이야기
스프링 Generic autowired 로 구현하는 제너릭 컨트롤러 이야기라한사 아
 
동시성 프로그래밍 기초 in GO
동시성 프로그래밍 기초 in GO 동시성 프로그래밍 기초 in GO
동시성 프로그래밍 기초 in GO 라한사 아
 
스프링 Generic autowired이용해보기
스프링 Generic autowired이용해보기스프링 Generic autowired이용해보기
스프링 Generic autowired이용해보기라한사 아
 
신림프로그래머 스터디 웹팩 발표자료
신림프로그래머 스터디 웹팩 발표자료신림프로그래머 스터디 웹팩 발표자료
신림프로그래머 스터디 웹팩 발표자료라한사 아
 
Groovy 시작 입문
Groovy 시작 입문Groovy 시작 입문
Groovy 시작 입문라한사 아
 
블로그 주도 개발
블로그 주도 개발블로그 주도 개발
블로그 주도 개발JeongHun Byeon
 
Django in Production
Django in ProductionDjango in Production
Django in ProductionHyun-woo Park
 
장고로 웹서비스 만들기 기초
장고로 웹서비스 만들기   기초장고로 웹서비스 만들기   기초
장고로 웹서비스 만들기 기초Kwangyoun Jung
 
자바 웹 개발 시작하기 (10주차 : ㅌㅗㅇ ㅎㅏ ㄹㅏ)

자바 웹 개발 시작하기 (10주차 : ㅌㅗㅇ ㅎㅏ ㄹㅏ)
자바 웹 개발 시작하기 (10주차 : ㅌㅗㅇ ㅎㅏ ㄹㅏ)

자바 웹 개발 시작하기 (10주차 : ㅌㅗㅇ ㅎㅏ ㄹㅏ)
DK Lee
 
Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.Kyoung Up Jung
 
201803 파이썬 세미나
201803 파이썬 세미나201803 파이썬 세미나
201803 파이썬 세미나JeongHwan Kim
 
간단한 블로그를 만들며 Django 이해하기
간단한 블로그를 만들며 Django 이해하기간단한 블로그를 만들며 Django 이해하기
간단한 블로그를 만들며 Django 이해하기Kyoung Up Jung
 
나의 jQuery 실력 향상기
나의 jQuery 실력 향상기나의 jQuery 실력 향상기
나의 jQuery 실력 향상기정석 양
 

What's hot (20)

스프링 데이터 레디스 엘라스틱 발표자료
스프링 데이터 레디스 엘라스틱 발표자료스프링 데이터 레디스 엘라스틱 발표자료
스프링 데이터 레디스 엘라스틱 발표자료
 
구글앱엔진+스프링+스프링datajpa+메이븐
구글앱엔진+스프링+스프링datajpa+메이븐구글앱엔진+스프링+스프링datajpa+메이븐
구글앱엔진+스프링+스프링datajpa+메이븐
 
Go revel 구성_루팅_정리
Go revel 구성_루팅_정리Go revel 구성_루팅_정리
Go revel 구성_루팅_정리
 
spring data jpa 간단한 튜토리얼
spring data jpa 간단한 튜토리얼spring data jpa 간단한 튜토리얼
spring data jpa 간단한 튜토리얼
 
스프링 오픈소스 정리
스프링 오픈소스 정리스프링 오픈소스 정리
스프링 오픈소스 정리
 
스프링 Generic autowired 로 구현하는 제너릭 컨트롤러 이야기
스프링 Generic autowired 로 구현하는 제너릭 컨트롤러 이야기스프링 Generic autowired 로 구현하는 제너릭 컨트롤러 이야기
스프링 Generic autowired 로 구현하는 제너릭 컨트롤러 이야기
 
동시성 프로그래밍 기초 in GO
동시성 프로그래밍 기초 in GO 동시성 프로그래밍 기초 in GO
동시성 프로그래밍 기초 in GO
 
스프링 Generic autowired이용해보기
스프링 Generic autowired이용해보기스프링 Generic autowired이용해보기
스프링 Generic autowired이용해보기
 
신림프로그래머 스터디 웹팩 발표자료
신림프로그래머 스터디 웹팩 발표자료신림프로그래머 스터디 웹팩 발표자료
신림프로그래머 스터디 웹팩 발표자료
 
Groovy 시작 입문
Groovy 시작 입문Groovy 시작 입문
Groovy 시작 입문
 
블로그 주도 개발
블로그 주도 개발블로그 주도 개발
블로그 주도 개발
 
Django in Production
Django in ProductionDjango in Production
Django in Production
 
Gulp 입문
Gulp 입문 Gulp 입문
Gulp 입문
 
장고로 웹서비스 만들기 기초
장고로 웹서비스 만들기   기초장고로 웹서비스 만들기   기초
장고로 웹서비스 만들기 기초
 
자바 웹 개발 시작하기 (10주차 : ㅌㅗㅇ ㅎㅏ ㄹㅏ)

자바 웹 개발 시작하기 (10주차 : ㅌㅗㅇ ㅎㅏ ㄹㅏ)
자바 웹 개발 시작하기 (10주차 : ㅌㅗㅇ ㅎㅏ ㄹㅏ)

자바 웹 개발 시작하기 (10주차 : ㅌㅗㅇ ㅎㅏ ㄹㅏ)

 
Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.Django, 저는 이렇게 씁니다.
Django, 저는 이렇게 씁니다.
 
201803 파이썬 세미나
201803 파이썬 세미나201803 파이썬 세미나
201803 파이썬 세미나
 
간단한 블로그를 만들며 Django 이해하기
간단한 블로그를 만들며 Django 이해하기간단한 블로그를 만들며 Django 이해하기
간단한 블로그를 만들며 Django 이해하기
 
나의 jQuery 실력 향상기
나의 jQuery 실력 향상기나의 jQuery 실력 향상기
나의 jQuery 실력 향상기
 
플라스크 템플릿
플라스크 템플릿플라스크 템플릿
플라스크 템플릿
 

Similar to 스프링시큐리티와 소셜연습 이해를 위한 글

SJBoard Project Portfolio
SJBoard Project PortfolioSJBoard Project Portfolio
SJBoard Project PortfolioJuyoungKang7
 
웹사이트기획 및 관리
웹사이트기획 및 관리웹사이트기획 및 관리
웹사이트기획 및 관리봉조 김
 
Tks프로젝트v2
Tks프로젝트v2Tks프로젝트v2
Tks프로젝트v2jrlim80
 
QnA blog using Django - ORM, 회원가입, 로그인/로그아웃
QnA blog using Django - ORM, 회원가입, 로그인/로그아웃QnA blog using Django - ORM, 회원가입, 로그인/로그아웃
QnA blog using Django - ORM, 회원가입, 로그인/로그아웃Kwangyoun Jung
 
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220Seomgi Han
 
2조 프로젝트 보고서 김동현
2조 프로젝트 보고서 김동현2조 프로젝트 보고서 김동현
2조 프로젝트 보고서 김동현kdh24
 
Naver Campus Hackday Winter 2017 참가 후기
Naver Campus Hackday Winter 2017 참가 후기Naver Campus Hackday Winter 2017 참가 후기
Naver Campus Hackday Winter 2017 참가 후기Youngbin Han
 
신입 웹 개발자 포트폴리오 / 댓글 게시판
신입 웹 개발자 포트폴리오 / 댓글 게시판신입 웹 개발자 포트폴리오 / 댓글 게시판
신입 웹 개발자 포트폴리오 / 댓글 게시판hyeonjae Cheon
 
쇼핑검색 React 전환 경험 공유
쇼핑검색 React 전환 경험 공유쇼핑검색 React 전환 경험 공유
쇼핑검색 React 전환 경험 공유NAVER SHOPPING
 
스마일게이트 서버개발캠프 - HGHSS - 합격하소서
스마일게이트 서버개발캠프 - HGHSS - 합격하소서스마일게이트 서버개발캠프 - HGHSS - 합격하소서
스마일게이트 서버개발캠프 - HGHSS - 합격하소서ServerDevCamp
 
좌충우돌 ORM 개발기 2012 DAUM DEVON
좌충우돌 ORM 개발기 2012 DAUM DEVON좌충우돌 ORM 개발기 2012 DAUM DEVON
좌충우돌 ORM 개발기 2012 DAUM DEVONYounghan Kim
 
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018devCAT Studio, NEXON
 
Spring@mvc웹호스팅
Spring@mvc웹호스팅Spring@mvc웹호스팅
Spring@mvc웹호스팅J.H Ahn
 
반복적인 코드 작업 자동화, Codebone으로 손쉽게
반복적인 코드 작업 자동화, Codebone으로 손쉽게반복적인 코드 작업 자동화, Codebone으로 손쉽게
반복적인 코드 작업 자동화, Codebone으로 손쉽게Sungju Jin
 
생활 코딩 #2(Simple Web Scraping with Python #2)
생활 코딩 #2(Simple Web Scraping with Python #2)생활 코딩 #2(Simple Web Scraping with Python #2)
생활 코딩 #2(Simple Web Scraping with Python #2)SeungYong Baek
 
코드잇-리액트-특강.pdf
코드잇-리액트-특강.pdf코드잇-리액트-특강.pdf
코드잇-리액트-특강.pdf이정환
 

Similar to 스프링시큐리티와 소셜연습 이해를 위한 글 (20)

SJBoard Project Portfolio
SJBoard Project PortfolioSJBoard Project Portfolio
SJBoard Project Portfolio
 
웹사이트기획 및 관리
웹사이트기획 및 관리웹사이트기획 및 관리
웹사이트기획 및 관리
 
Light Tutorial Django
Light Tutorial DjangoLight Tutorial Django
Light Tutorial Django
 
Tks프로젝트v2
Tks프로젝트v2Tks프로젝트v2
Tks프로젝트v2
 
QnA blog using Django - ORM, 회원가입, 로그인/로그아웃
QnA blog using Django - ORM, 회원가입, 로그인/로그아웃QnA blog using Django - ORM, 회원가입, 로그인/로그아웃
QnA blog using Django - ORM, 회원가입, 로그인/로그아웃
 
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
피플펀드 웹서비스 성능개선기(+초기 스타트업의 개발방법론) 20171220
 
2조 프로젝트 보고서 김동현
2조 프로젝트 보고서 김동현2조 프로젝트 보고서 김동현
2조 프로젝트 보고서 김동현
 
Naver Campus Hackday Winter 2017 참가 후기
Naver Campus Hackday Winter 2017 참가 후기Naver Campus Hackday Winter 2017 참가 후기
Naver Campus Hackday Winter 2017 참가 후기
 
신입 웹 개발자 포트폴리오 / 댓글 게시판
신입 웹 개발자 포트폴리오 / 댓글 게시판신입 웹 개발자 포트폴리오 / 댓글 게시판
신입 웹 개발자 포트폴리오 / 댓글 게시판
 
Place site Design
Place site DesignPlace site Design
Place site Design
 
Web micro blog
Web micro blogWeb micro blog
Web micro blog
 
Showroom 2019-react
Showroom 2019-reactShowroom 2019-react
Showroom 2019-react
 
쇼핑검색 React 전환 경험 공유
쇼핑검색 React 전환 경험 공유쇼핑검색 React 전환 경험 공유
쇼핑검색 React 전환 경험 공유
 
스마일게이트 서버개발캠프 - HGHSS - 합격하소서
스마일게이트 서버개발캠프 - HGHSS - 합격하소서스마일게이트 서버개발캠프 - HGHSS - 합격하소서
스마일게이트 서버개발캠프 - HGHSS - 합격하소서
 
좌충우돌 ORM 개발기 2012 DAUM DEVON
좌충우돌 ORM 개발기 2012 DAUM DEVON좌충우돌 ORM 개발기 2012 DAUM DEVON
좌충우돌 ORM 개발기 2012 DAUM DEVON
 
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
윤석주, 인하우스 웹 프레임워크 Jul8 제작기, NDC2018
 
Spring@mvc웹호스팅
Spring@mvc웹호스팅Spring@mvc웹호스팅
Spring@mvc웹호스팅
 
반복적인 코드 작업 자동화, Codebone으로 손쉽게
반복적인 코드 작업 자동화, Codebone으로 손쉽게반복적인 코드 작업 자동화, Codebone으로 손쉽게
반복적인 코드 작업 자동화, Codebone으로 손쉽게
 
생활 코딩 #2(Simple Web Scraping with Python #2)
생활 코딩 #2(Simple Web Scraping with Python #2)생활 코딩 #2(Simple Web Scraping with Python #2)
생활 코딩 #2(Simple Web Scraping with Python #2)
 
코드잇-리액트-특강.pdf
코드잇-리액트-특강.pdf코드잇-리액트-특강.pdf
코드잇-리액트-특강.pdf
 

More from 라한사 아

자바로 Mnist 구현하고_스프링웹서버붙이기
자바로 Mnist 구현하고_스프링웹서버붙이기자바로 Mnist 구현하고_스프링웹서버붙이기
자바로 Mnist 구현하고_스프링웹서버붙이기라한사 아
 
Growing object oriented software guided by test
Growing object oriented software guided by testGrowing object oriented software guided by test
Growing object oriented software guided by test라한사 아
 
Go 페이징게시판만들기
Go 페이징게시판만들기Go 페이징게시판만들기
Go 페이징게시판만들기라한사 아
 
구글 검색엔진 최적화(Seo) 정리
구글 검색엔진 최적화(Seo) 정리구글 검색엔진 최적화(Seo) 정리
구글 검색엔진 최적화(Seo) 정리라한사 아
 
프로그래밍 go투어 정리
프로그래밍 go투어 정리프로그래밍 go투어 정리
프로그래밍 go투어 정리라한사 아
 
개발자를위한 오픈소스라이선스
개발자를위한 오픈소스라이선스개발자를위한 오픈소스라이선스
개발자를위한 오픈소스라이선스라한사 아
 

More from 라한사 아 (8)

자바로 Mnist 구현하고_스프링웹서버붙이기
자바로 Mnist 구현하고_스프링웹서버붙이기자바로 Mnist 구현하고_스프링웹서버붙이기
자바로 Mnist 구현하고_스프링웹서버붙이기
 
Growing object oriented software guided by test
Growing object oriented software guided by testGrowing object oriented software guided by test
Growing object oriented software guided by test
 
Slipp 발표 - GO
Slipp 발표 - GOSlipp 발표 - GO
Slipp 발표 - GO
 
Go 페이징게시판만들기
Go 페이징게시판만들기Go 페이징게시판만들기
Go 페이징게시판만들기
 
구글 검색엔진 최적화(Seo) 정리
구글 검색엔진 최적화(Seo) 정리구글 검색엔진 최적화(Seo) 정리
구글 검색엔진 최적화(Seo) 정리
 
프로그래밍 go투어 정리
프로그래밍 go투어 정리프로그래밍 go투어 정리
프로그래밍 go투어 정리
 
개발자를위한 오픈소스라이선스
개발자를위한 오픈소스라이선스개발자를위한 오픈소스라이선스
개발자를위한 오픈소스라이선스
 
자바채팅 다중
자바채팅 다중자바채팅 다중
자바채팅 다중
 

스프링시큐리티와 소셜연습 이해를 위한 글

  • 1. 스프링 시큐리티 +소셜+JPA (JAVA CONFIG)정리 ---------- 1 https://fb.com/me.adunhansa https://twitter.com/arahansa http://adunhansa.tistory.com/ ABOUT CONTACT SOURCE 1
  • 2. • 본 글은 Petri 라는 외국의 개발자분께서 쓰신 글을 번역한 글을 조금 더 알기 쉽게 ppt로 정리하였다. 역자가 아직 스프링 시큐리티와 소셜에 익숙하지 않으며, JavaConfig 설정도 익숙하지 않아서 애로사항이 많아 • 정리할겸 만들어봤다. 번역글은 http://adunhansa.tistory.com/192 에 있으며 번역글이 좀 많고 읽으며 복붙해도 이해가 바로 잘 안되서 일단 둘러보기정도용도로 본 ppt는 쓰일 것이다. • 원래 글작성자분=> • 블로그는 http://www.petrikainulainen.net/ 0. 들어가기앞서 2
  • 3. 아라한사 ----------------------- -------------------------------------------- 국내에도 브로그래머문화가 확산되기를 바라며 이것저것.. 관심만 많음-.- 1. 작성자 소개 3
  • 4. • 자 들어가기 앞서서 크게 뭐뭐가 있는지 한번 살펴보도록 하겠다. 미리 큰 밑그림을 그려두고 소스를 복붙할때마다 • 이게 어디서 어떻게 작동하는지 알아두면 좋을 것같다는 생각이다. • 일단 패키지가 뭐 뭐가 있는 한번 살펴보겠다. • 자세한 내용은 http://adunhansa.tistory.com/192 참조 2. 환경설정 – 들어가기 앞서 4
  • 5. 2. 환경설정 – 들어가기 앞서 5
  • 6. 6 • 여기까지는 잡다한 설정과 • jsp 파일들 이 있는 곳.. • 아. 뭐가 이리 많어~_~ • 하나 하나 알아보자. ㅎㅎ 2. 환경설정 – 들어가기 앞서
  • 7. 7 • 아차, 자 본 ppt를 보는 데 있어서 큰 뿌리? 맥이라고 할만한 것은. 일반전통적방식과 소셜기능으로 가입&로그인하는 경우가 있으니 스프링에서 이 두 가지 경우를 생각해야 한다는 것이다. • 따라서 인터페이스도 두가지 경우로 나뉘며, 가입클래스도 두 가지 경우를 분기혹은 다른 클래스로 나눴던 것같다(기억에..아마도?;;)
  • 8. 8 만드는 순서. 일단 ExampleUserDetail RepositoryUserDetailService UserRepository User SimpleSocialUserDetail Service 설정부터 들어갈 줄 알았는데, 이런 작업이 먼저 들어가더라. 2. 환경설정 –
  • 9. 9 • 인증과정에서 세가지 컴포넌트가 필요하다고 하는데 1. 인증된 유저세부사항을 담을 클래스 2. UserDetailService 인터페이스 3. SocialUserDetailService 인터페이스 이다. • 1번의 내용은 UserDetails 와 SocialUserDetails 로 나는데 이는 SocialUser라는 클래스가 가지고 있으니 이를 확장해서 쓰면 된다고 한다. 2. 환경설정
  • 10. • 대략 이런 느낌의 ExampleUserDetails 를 만든다. 만드는 순서. 일단 ExampleUserDetail RepositoryUserDetailService UserRepository User SimpleSocialUserDetail Service 2. 환경설정 10
  • 11. • UserRepository를 가지고서 또 구현 클래스를 만든다^^ 만드는 순서. 일단 ExampleUserDetail RepositoryUserDetailService UserRepository User SimpleSocialUserDetail Service 2. 환경설정 11
  • 12. 만드는 순서. 일단 ExampleUserDetail RepositoryUserDetailService UserRepository User SimpleSocialUserDetail Service 소셜기능도 유저디테일서비스를 이미 있는 스프링의 인터페이스등을 이용해서 만든다. 2. 환경설정 12
  • 13. 만드는 순서. 일단 ExampleUserDetail RepositoryUserDetailService UserRepository User SimpleSocialUserDetail Service 유일한 엔티티인 유저 클래스도 만든다. 2. 환경설정 13
  • 14. 14 자 이제 설정~~ 들어간다~~~ <=Web.xml 인듯하다 <=applicationContext <=Datasource와 트랜잭션매니져, 영속화 관련 빈설정들 <= 시큐리티 설정 <= 소셜 설정 <= dispatcherServlet 설정이 들어가는 곳인듯하다! 2. 환경설정 – 들어가기 앞서
  • 15. • 영속콘텍스트 설정이다. 영속 단어가..입에 잘 안 붙는데.. 디비저장부분.. 뭐..이런 느낌이다.;; • 아웃라인이 더 나아보인다. 데이터소스, 트랜잭션매니져, 엔티티매니져팩토리 2. 환경설정- 영속 클래스 15
  • 16. • 시큐리티 콘텍스트 설정.. 빈으로는 패스워드인코더, 소셜디테일서비스, 유저디테일서비스가 있고 configure 로 보안설정들을 한다. 2. 환경설정- 시큐리티 클래스 16
  • 17. • 소셜 콘텍스트는 소셜 키설정등을 한다. 여기서 봐야할 것이 JdbcUsersConnectionRepository 였는데, 이것이 userconnection 이라는 테이블에 소셜키등을 저장한다. 2. 환경설정- 소셜 콘텍스트 17
  • 18. • dispatcherServlet에 들어갈 내용을 자바설정으로 이렇게 했다. 비교적 간단한 내용들이므로 생략. 2. 환경설정- 웹앱콘텍스트 18
  • 19. • 애플리케이션콘텍스트 설정이다. 지금까지 설정했던 것들과 properties와 메시지등등을 모두 불러온다. 2. 환경설정- applicationContext 19
  • 20. • 스프링 xml 설정에서 web.xml 에 applicationContext.xml 과 각종 Character설정등등을 해준 기억이 있을 것이다. 그것을 요런 식으로 자바설정을 하더라~~~ 2. 환경설정- web.xml 대신.. 20
  • 21. • 자 지금까지 환경설정을 참 많이도 했다.헥헥;; • 그렇다면 이제 실제 가입과 페이지등을 어떻게 구현할 지 알아보도록 하자~~ • 먼저 로그인 페이지 부터^^ 2. 환경설정- 끝^^ 21
  • 22. • 익숙한 컨트롤러와, Jsp 페이지 • Jsp에서 잘 봐야하는 부분은 • isAnonymous()부분(생략됨)이며 • 로그인여부로 페이지가 달라짐. 3. 로그인&가입 - 로그인컨트롤러 22
  • 23. • 익숙한 컨트롤러와, Jsp 페이지 • Jsp에서 잘 봐야하는 부분은 • isAnonymous()부분(생략됨)이며 • 로그인여부로 페이지가 달라짐. 3. 로그인&가입 - 로그인컨트롤러 23
  • 24. • 자 일단 만들면, 이런 식의 페이지가 보여질 것이다. • 설정하느라 힘들었는데 여기서 뭔가 뿌듯함이 느껴졌지만 회원가입이 안됐다. 회원가입을 구현해보자! 3. 로그인&가입 - 로그인컨트롤러 24
  • 25. • 회원가입을 위한 DTO객체 RegistrantionForm 이다. • 웹 계층에서 받아서 데이터를 전송(Data transfer) 데 쓰인다. • 검증도 하게 되는데 • 자세한 설명은 블로그글 을 보면 되겠다~ 지금은 흐름만~ 3. 로그인&가입 - DTO 25
  • 26. • 자 이제 소셜과는 약간 다른 내용인 폼 검증을 위한 클래스들을 얘기한다. • 다음 패키지의 메타인터페이스에 대한 설명이 나오기 시작한다. 메타인터페이스를 만드는 방법은 블로그글에 참고 • 요런 식으로 검증 인터페이스를 만들었다~ • PasswordsNotEqual은 생략 3. 로그인&가입 – 유효성 검증 26
  • 27. • 검증하는 클래스를 만들었다. ConstraintValidator 를 구현해서 초기화시킨후에 검증하는 과정을 거쳐 boolean 값으로 리턴함. • 소셜+시큐리티가 주 목적이므로 검증은 패스패스;; 3. 로그인&가입 – 유효성 검증 27
  • 28. • 인증에러를 넣어주기 위한 ValidationUtil 클래스. 첫번째 필드는 에러를 넣어주는 것이고, 두번째 필드는 리플렉션을 이용하여서 필드의 값을 얻는 것이다. • 유효성 검증은 이정도로 하고, 등록 페이지 컨트롤러로 가보자(유효성 검증 조금 토나와..ㅠㅠ) 3. 로그인&가입 – 유효성 검증 28
  • 29. • 등록페이지를 만드는 데도 일반 등록과 함께 소셜등록을 염두에 둬야 한다. 소셜을 통한 등록일 경우 model에 DTO로서, registration 이 포함되어있는 구조이다. 소셜코넥션을 받아서 DTO로 변환. 코넥션이 없으면 빈 객체 3. 로그인&가입 – 등록페이지 29
  • 30. • 앞서에서 model 에 registration 을 addAttribute 하였다. Registration 에 signInProvider의 유무에 따라 다음과 같이 페이지가 변하게 된다. 3. 로그인&가입 – jsp 가입폼 30
  • 31. • 회원가입 페이지의 이 부분을 살펴보면 된다. 3. 로그인&가입 – jsp 가입폼 31
  • 32. • 가입처리하는 POST 부분이다. 가입 처리가 되는 부분은 createUserAccount 부분인데, service 를 @autowired 받은 것에서 가입처리를 한다. 실제로 돌아가는 서비스 클래스는 RepositoryUserService 이며 이전에 만들었다. 다음 슬라이드에서 어떤 구조인지 나온다. • 아 그리고 SecurityUtil의 LogInUser도 잘 봐야 한다. 가입후 로그인시켜주는 기능이다. 3. 로그인&가입 – 가입처리 32
  • 33. • 대략 이런 구조이다. RegistraionForm(DTO) 가 User로 변경된다. 3. 로그인&가입 – 가입처리 33
  • 34. • 여기사 시큐리티유틸의 로그인해주는 부분이다. User를 받아서 로그인을 하는 기능이 구현되어있는 ExampleUserDetails 로 변환을 해서 로그인을 한다. 처음에 UserDetails 와 SocialUserDetails 가 들어있는 SocialUser 클래스를 상속했던 것을 기억하자. 3. 로그인&가입 – 가입처리 후 로그인 34
  • 35. • Db에 저장되는 용도로 쓰이는 엔티티. 모델 User 이다. DTO 와 UserDetails 클래스의 중간에 있다고나 할까.. 자세한 설명은 생략. 블로그글 참조.; 3. 로그인&가입 – user 모델 35
  • 36. • 참조한 외국의 블로그 본 글에 순서가 이렇게 되어있어서 적는다. 서비스와 리파지토리 3. 로그인&가입 – 서비스 36
  • 37. • 에 .. 뭔가 그냥 내가 블로그글을 보면서 정리하는 식으로 만들어봤는데, 내가 시큐리티, 자바설정, 소셜등에 익숙치 않은 상태, 큰 그림이 없는 상태에서 블로그글을 처음 접했을 때 당장에 이해가 확 되지 않던 것처럼 이 글도 처음 접하는 사람에게는 뭔가 .. @_@ 이러한 느낌이 오지 않을까 싶다. • 다시 한번 패키지의 구조들을 떠올려보면서, 어디어디에 필요했던 건지 생각을 해봐야겠다. • 그러니까 중요했던 것은 크게 설정 후 로그인 페이지 구현 가입처리 페이지 구현, 가입구현, 폼 검증등을 했었다. • 시큐리티에 의해서 자동으로 요러한 주소(밑에)들이 리퀘스트 매핑된다. • /login/authenticate 로그인 과정은 이러한 주소가 자동으로 시큐리티에 의해 생기고, 시큐리티가 필요로 하는 UserDetails 서비스 관련 인터페이스를(RepositoryUserDetailsService 를 보자) 구현함으로써 컨트롤러를 딱히 만들지 않아도 자동으로 구현이 되었다. 4. 정리- 궁시렁.. 37
  • 38. • 가입하는 과정은 시큐리티가 정한 주소를 다시 리퀘스트매핑 하여서 처리하였다. 폼등록시 GET 과정과 POST 과정을 눈여겨보자 – SignUpController 에서 RegistrationController 로 가고, 소셜 기능이 중간중간에 섞여서 ProviderSignInUtils 나타났던 것을 기억하자. 아... 지금 저는 이해가 많이 된 편이라, 쉽게 적는데 보는 분도 쉽게 이해하시길-_-; 나름 뭔가 처음으로 소스분석을 해봐서 뜻깊네요. 홈페이지에 소셜기능 많이많이 생기길^^ 4. 정리 38
  • 39. 39 THANK YOU ! arahansa ------ ------ 페북 : https://fb.com/me.adunhansa 트위터 : https://twitter.com/arahansa 블로그: http://adunhansa.tistory.com/
  • 40. ------ ------ 페북 : https://fb.com/me.adunhansa 트위터 : https://twitter.com/arahansa 블로그: http://adunhansa.tistory.com/ arahansa 40 출처 Petri Kainulainen 은 소프트웨어 개발과 지속적향상에 열정과 관심을 가지고 있으며 스프링 프레임워크의 전문가이자, Spring Data Book 의 저자이기도 합니다. 이 링크로 가시면 그의 블로그로 가실 수 있습니다. http://www.petrikainulainen.net/ 스프링 참고 원글 : http://www.petrikainulainen.net/programming/spring-framework/ adding-social-sign-in-to-a-spring-mvc-web-application-configuration/

Editor's Notes

  1. 5페이지 자유소프트웨어와 오픈소스