Spring boot kim's Shop/로그인

Springboot Jwt+로그인!(2) with 로그인 완료

디비드킴 2021. 8. 3. 18:18

자 이제 로그인 완료 처리를 해줄 건데
지금은 약식으로 파라미터로 던져줘서
url에 그대로 노출이 되었다

이제 쿠키를 이용해 정보를 얻어와서
넣어주자

프런트
js

js

로그인 성공 뒤 링크를 index로 바꿔준다
location.href='index';

controller

controller.java

이메일을 얻어오는 함수이다
userService.getEmail(request, response, token, refreshToken)

jwtService

jwtService.java

쿠키 가져오기
String jwtToken=cookie.getValue();
String refreshToken=cookie2.getValue();
서버와 통신 시도
JSONObject jsonObject=callApiService.callApi(jwtToken,refreshToken, url);
반환 값에 토큰이 하나라도 있다면
if(jsonObject.get(AuthorizationTokenName)!=null||jsonObject.get(refreshTokenName)!=null)
새 액세스 토큰 or 리프레시 토큰 쿠키 저장
jwtToken=(String)jsonObject.get(AuthorizationTokenName);
aList.add(AuthorizationTokenName);
aList.add(jwtToken);
새 토큰으로 다시 통신
jsonObject=callApiService.callApi(jwtToken,refreshToken, url);

이러면 두 번씩 통신하는 거 아니냐?!
그렇지 않다

첫 통신에 성공했다면
if(jsonObject.get(AuthorizationTokenName)!=null||jsonObject.get(refreshTokenName)!=null)안으로 들어오지 않기 때문!

userService

userService.java

서버에서 온 결과를 리턴해준다
public JSONObject getUserInfor
json에서 이메일 값을 추출한다
public String getEmail

백엔드

https://cordingmonster.tistory.com/120

 

Springboot Jwt 토큰 재발급!(2) with 시큐리티 예외처리

리프레시 토큰 사용전 서버 토큰 발급 형식을 둘다 쿠키로 바꿨다 https://cordingmonster.tistory.com/119?category=1039797 쿠키" data-ke-align="alignCenter" data-og-description="좀 바꿔줘야 할 부분이 있..

cordingmonster.tistory.com

이전에 구현 해서크게 해 줄 건 없다
네이버/카카오 리다이렉트 경로를 수정해주자

controller

controller.java

테스트

로그인

http://localhost:3030/index

카카오 로그인

http://localhost:3030/index

네이버 로그인

http://localhost:3030/index

url 뒤에 노출되지 않고 잘 나온다

후아...
여기까지 하면서 느낀 점은
1. 로컬 스토리지보단 쿠키가 좋다
2. 오타를 잘 보자 콘솔 창을 잘 보자^^
3.jwt는 매력적이다

이제 로그아웃을 만들어보자

++추가
비로그인 홈페이지 이동시
트라이 캐치를 추가해서
예외가 발생해서 처리해준다

userService.java

생각해봤는데
토큰이 없다면 아예 서버에 요청 할 필요가 있나..?

userService.java

토큰이 있나 검사를 하고
if(token.getValue().isEmpty()==false&&refreshToken.getValue().isEmpty()==false)
있다면 로그인 사용자이므로
이메일값을 얻어오고
JSONObject jsonObject=getUserInfor(request, response, token, refreshToken,url)
없다면 그냥 바로 null을 주면 될거같다
return null;