SpringbootSecurity

SpringbootSecurity/JWT 사용한 로그인(2)

25G 2021. 10. 1. 17:01

이번 포스팅은 저번 포스팅과 연결돼 있습니다.

 

실제 로그인을 해보기전에 테스트를 해보면서 이해도를 올려보자

포스트맨으로 위와같이 요청을 할 때 아래 함수가 실행되는데 이때 request에 담겨있는 데이터가 어떻게 들어오는지 확인하기 위해서 테스트를 해본다.

request에 담겨있는 username과 password가 들어온다.

근데 만약에 데이터를 json으로 보내면 어떻게될까?

json형식의 데이터가 오는 것을 알 수 있다.

 

일반적으로 웹 브라우져에서만 로그인 요청이 오지는 않는다. 안드로이드나 자바스크립트로 json데이터를 주고받을 수도 있기 때문에 위 json데이터를 파싱 해보자

 

위와 같이 해주면 json데이터를 파싱 해주는데 파싱 된 데이터를 user오브젝트에 담았다.

파싱된 json데이터가 user오브젝트로 잘 들어간것을 볼 수 있다.

 

이제 로그인 시도를 하기 위해서 token을 만들어야 하는데 원래 formlogin을 하면 자동으로 되는 건데 formlogin을 하지 않기 때문에 직접 만들어 줘야한다.

토큰을 만들어주고

authenticationManager에 토큰을 넣어서 던지면 Spring에서 내부적으로 알아서 인증을 해준다. (원래는 id만 받아짐)

그리고 해당함수의 리턴타입이Authentication 이기때문에 return을 Authentication의 객체로 해줬고  이때 return되면서 Security의 session영역에 들어간다.

principalDetails에 username이 제대로 들어갔다는 것은 로그인이 됐다는 것이다

 

주석을 꼭 참고해야 이해할 수 있습니다.

 

authentication 객체를 session영역에 저장 해야 하고 그 방법은 return 해주면 된다.
굳이 리턴을 하는 이유는 권한 관리를 security가 대신해주기 때문에 편리 하려고 하는 것임
굳이 JWT토큰을 사용하면서 세션을 만들 이유가 없다. 근데 단지 권한 처리 대문에 sesison에 넣어주는 것이다.

 

그렇다면 이제 로그인 요청 처리를 다 했으니 토큰을 만들어서 응답을 해줘야 하는데 굳이 이 함수에서 처리를 할 필요가 없다.

위 함수가 종료가 된 뒤에 실행되는 함수가 있다.

attemptAuthentication() 함수로 로그인 처리를 다 하고 함수가 종료가 되면 successfulAuthentication() 함수가 실행된다.

 

attemptAuthentication함수가 종료되고successfulAuthentication함수가 실행됐다.굳

그럼 이제 이 후처리 하는 함수에서 JWT토큰을 서버에서 만들어서 응답을 해주면 되는 것이다.

 

https://github.com/fj2008/JWTstudy

 

GitHub - fj2008/JWTstudy

Contribute to fj2008/JWTstudy development by creating an account on GitHub.

github.com