loginForm에서 <form action=...>에서 action부분을 삭제한다. 이 방식을 사용하지 않을 것이기 때문이다.
또 버튼을 form 밖으로 빼낸 다음
type을 btn-login으로 변경하고 user.js를 불러온다.
이전에 회원가입을 user.js에서 ajax로 처리한 방식과 같다고 생각하면 된다.
현재 user.js에는 회원가입을 처리하는 코드가 작성되어있는데
이를 복사 붙여넣기 한 다음 수정해서 로그인을 처리하는 코드도 작성하면 된다.
여기서부터
여기까지 복사를 한 후
, 를 찍고 그 아래에다 붙여넣기 해준다.
붙여넣기하고 다음과 같이 간단하게 수정한다.
저기 주석처리 되어있는 location.href = "/blog"; 에서 주석을 지워주자
그래야 블로그 홈화면으로 이동한다.
위에 다음과 같이 코드를 추가 작성한다.
참고로 id가 btn-login 이여야 하기 때문에
현재 loginForm.jsp에서 type=btn-login이라고 되어있는 코드를
다음과 같이 id=btn-login으로 바꿔준다.
그러면 이제 여기에 대한 컨트롤러를 만들러 가보자
UserApiController로 가자
현재 회원가입을 처리하는 코드가 있다.
로그인을 처리하는 코드도 작성해주자
다음과 같이 작성한다.
그리고 userService로 가서 로그인을 작성하면
이렇게 작성하면 되는데, 로그인의 경우 save가 아니라 다른 것이 필요하다.
userRepository에서 간편하게 회원가입에서 save를 꺼내서 쓴 것처럼
로그인도 이런 함수가 내장되어 있어서 간편하게 꺼내서 쓸 수 있겠지? 싶었지만
그런거 없으니 직접 작성해서 써야한다고 한다.
userRepository로 가서 다음 코드를 작성한다.
JPA 네이밍 전략 (쿼리)인데,
findByUsernameAndPassword 이 함수는 JPA에 없는 함수이다. 실제로 존재하지 않는 함수라는 것이다.
그런데 이름을 이렇게 findByUsernameAndPassword로 함수를 만들면 이 함수가 어떤 일을 하냐면
다음과 같은 쿼리가 자동으로 실행된다.
SELECT * FROM user WHERE username = ?1 AND password = ?2;
이 첫 번째 username = ? 의 물음표에는 username이 들어가게 되고,
password = ? 의 물음표에는 password가 들어가게 된다.
이게 스프링 JPA의 네이밍 전략이라는 것이다. (신기하다 ㄷㄷ..)
원래 방식인 네이티브 쿼리를 작성하는 방법도 있는데,
다음처럼 작성하는 것이다. 네이티브 쿼리를 사용할 것이 아니므로 주석처리해두고 알아만 두자
이제 함수를 작성했으니 다시 userService로 돌아가서 해당 함수를 써먹어보자!!
이렇게 만들었던 함수를 적용하였다.
그리고 코드를 다음과 같이 수정하자
return userRepository.find ...가 User를 리턴하게 되므로 void가 아니라 User를 기입한다.
이제 header.jsp에 jstl을 연동하자
header.jsp에 다음 코드를 붙여넣기해 jstl을 사용한다.
그리고 header.jsp를 다음과 같이 작성한다.
로그인이 안되어 있을 경우와 되어 있을 경우를 구분한 것이다.
그럼 이제 실행해보자
실행결과 :
현재 데이터베이스에 유저 daramG가 저장되어 있다.
이 계정으로 로그인해보자
+ 추가
스프링에선 다음과 같은 것도 가능하다.
UserApiController.java로 가서
해당 세션 객체를 잘라내기하고
여기다가 붙여넣기해서 @Autowired로 의존성을 주입해버리는 것도 가능하다.
이러면 세션 객체를 스프링 컨테이너가 빈으로 등록해서 가지게 된다.
필요하면 받아서 사용하면 된다.
다음엔 시큐리티 로그인에 대해 공부하고 진행하겠다.
참고자료 : https://youtu.be/GAy3my6Yroc
'자바 스프링 > 부트 블로그 JPA 프로젝트' 카테고리의 다른 글
#22 스프링 시큐리티2 (0) | 2022.05.13 |
---|---|
#21 스프링 시큐리티 (0) | 2022.05.12 |
#19 ResponseDto 수정 (0) | 2022.05.10 |
#18 회원가입 구현(REST API, Ajax) (0) | 2022.05.09 |
#17 회원가입을 위한 세팅(+jQuery, Ajax) (0) | 2022.05.09 |