스프링 시큐리티에 대해 공부하기 전, 전통적인 방식의 로그인 방법에 대해 공부하자
시작하기에 앞서 일단 ResponseDto를 수정하고 가겠다.
ResponseDto 수정
우선 아이디 중복 가입을 막기위해서 User모델에서 username에 unique 제약조건을 걸어준다.
application.yml에서 update에서 create로 변경해주고
현재 username가 daramG인 유저가 데이터베이스에 존재할 때
중복된 username인 daramG로 가입하게 되면 다음과 같은 오류가 발생한다.
unique 제약조건을 걸었으니 중복된 username으로 가입하니 오류가 발생한건데 뭐가 문제냐고 할 수 있는데,
{
"status": ~~,
"data": ~
}
이런 형식의 결과값이 리턴되어야 했다.
왜냐하면.. 음 단계별로 천천히 살펴보도록 하자
우리가 회원가입을 하면
return new ResponseDto<Integer>(HttpStatus.OK, result); 로
{
"status": ~~,
"data": ~
}
이 리턴되어야 하는데
GlobalExceptionHandler가 호출된 것이다.
현재 얘가 모든 Exception을 처리하기로 되어있기 때문이다.
그래서 코드를 조금 수정해야 한다.
얘를 통해서 원하는 결과를 출력하도록 처리해보자
그 전에 우선
우선 UserService에서 try catch문을 지워버리고 int를 void로 변경한다.
그리고 return 앞에 있던 int result = 를 지워버리고 result를 지워버리고 1을 기입했다.
얘를 복사한다.
GlobalExceptionHandler.java에서 return 다음에 붙여넣고 다음과 같이 수정한다.
오류가 발생할 경우 여기서 ResponseDto한테 값을 보내는 것이다.
실행결과 :
이제 다시 중복된 아이디로 회원가입을 해보면
오류가 발생하면서 내가 원했던 형식으로 값을 리턴받게 된다!
status에는 HTTP 상태가 리턴되는데, 간결하게 HTTP 상태 코드로 리턴되게 코드를 변경해보자
우리가 이번에 확인할 HTTP 상태 코드는 200과 500이다.
200은 성공으로 서버가 요청을 제대로 처리했다는 뜻이다.
500은 내부 서버 오류로 서버에 오류가 발생하여 요청을 수행할 수 없다는 것이다.
참고로 HTTP 상태 코드는 다음과 같이 구성되어 있다.
세부적인 HTTP 상태 코드 : https://ko.wikipedia.org/wiki/HTTP_%EC%83%81%ED%83%9C_%EC%BD%94%EB%93%9C
그럼 이제 HTTP 상태 코드로 status가 리턴되게 코드를 변경해보자
ResponseDto에서 HttpStatus를 int로 변경해준다. 상태가 아니라 상태코드를 리턴할 예정이므로 int형으로 바꾼 것이다.
내부 서버 오류를 .value()로 상태코드로 변경한 것이다.
"INTERNAL_SERVER_ERROR"는 500이 된다. int형이 된 것이다.
이 역시 마찬가지로 상태를 상태코드로 변환하였다. 200이 된다.
실행결과 :
현재 테이블에 username이 daramG와 pinkbean인 유저가 있다.
동일한 username을 가진 daramG로 회원가입을 시도하면 다음과 같이 오류가 발생한다.
원하는 형식으로 값들이 출력된 모습이다.
참고자료 : https://youtu.be/f5zHFb1BHmY
'자바 스프링 > 부트 블로그 JPA 프로젝트' 카테고리의 다른 글
#21 스프링 시큐리티 (0) | 2022.05.12 |
---|---|
#20 기존 방식의 로그인 (0) | 2022.05.12 |
#18 회원가입 구현(REST API, Ajax) (0) | 2022.05.09 |
#17 회원가입을 위한 세팅(+jQuery, Ajax) (0) | 2022.05.09 |
#16 로그인, 회원가입 화면 만들기 (0) | 2022.05.08 |