그동안 프론트로부터 값이 들어오면 Controller -> Service에서 처리를 한 후 미리 만들어놓은 ResponseEntity에 원하는 응답 메시지를 작성하는 코드를 사용했었다
하지만 이번에는 조금 다르다
로그인을 하기위해 유저 이메일과 비밀번호의 값을 가지고 오면 바로 Controller에서 처리하는 것이 아니라 filter에서 처리를 하는 코드이다
따라서 다음과 같이 유저 이메일과 비밀번호의 값으로 만든 authenticationToken을 통해 authenticationManger의 authenticate에서 DB에 값으로 들어온 유저 이메일이 존재하는지, 그리고 그 비밀번호가 동일한지 확인해준다
만일 로그인에 유저 이메일이 존재하지 않거나, 비밀번호가 틀릴경우 BadCredentialsException을 뱉는다
오류가 나면 로그인에 실패했다는 문구와 상태코드를 반환해주어야 하므로, 위의 사진과 같이 하면 filter에서도 response 처리를 할 수 있다
여담으로 api를 설계할 때, 로그인이 실패시 왜 실패했는지 에러 메시지로 나타내주려 했다 (이메일이 존재하지 않는 경우, 비밀번호가 틀릴 경우)
하지만 저런 방식을 사용하면 이메일이 존재하지 않아도, 비밀번호가 틀려도.. 로그인이 실패하면 무조건 BadCredentialsException을 뱉기에 이를 해결하고자 상위 클래스에서 커스텀해보려 했다
하지만 우리가 원래 의도한 방식대로 왜 실패했는지에 대한 에러 메시지를 넘겨주면 보안에 문제가 될 수 있다고 하여서 관뒀다
'Project > Snacks' 카테고리의 다른 글
[Snacks 개발 일기] #6 구글 로그인정보를 통해 JWT 토큰 발급하기 (0) | 2022.12.12 |
---|---|
[Snacks 개발 일기] #5 테스트코드 MockMvc에 JWT 필터 적용하기 (0) | 2022.12.08 |
[Snacks 개발 일기] #4 구글 로그인 적용하기 (0) | 2022.12.02 |
[Snacks 개발 일기] #2 ResponseEntity 적용하기 (0) | 2022.11.17 |
[Snacks 개발 일기] #1 Parameterized Test를 사용한 테스트 코드 (0) | 2022.11.16 |