Spring을 활용해서 보드게시판 만들어보기 (2) 로그인 Session
위와 같이 데이터베이스에 저장된 정보로 로그인을 실행하면
로그인 성공 창과함께
위와 같이 환풍님 환영합니다. 라는 문구가 뜨며 접속할 수 있다. 이 기능은 Session을 이용해서 구현한 것이다.
여기서 다른 정보로 입력도 해보겠다.
이렇게 로그인 실패 알람이 뜨면서 다시 로그인 창으로 되돌아 온다.
login.html
로그인 html에서 ID와 PW를 입력한 후 Login버튼을 누르면 submit을 통해 action의 컨트롤러 주소를 찾아가게 된다.
이때 method="post"를 통해 @Postmapping으로,
th:object를 통해 memberVO 객체에 있는 th:field 속성으로 준 memId와 memPw를 가지고 간다.
MemberController
컨트롤러의 /member에 있는 로그인 경로 /login을 찾아가 해당 메소드를 실행하게 되는데,
HttpSession은 VO처럼 따로 만들어주지 않고, 위와 같이 객체를 선언만 해주면 자유자재로 사용할 수가 있다.
따라서 MemberVO 객체에 있는 login쿼리를 memberVO에 담아 loginInfo에 담아줄 수 있는데,
이전에 회원 등록 쿼리만 만들었기 때문에 이를 담아줄 쿼리가 필요하다. 바로 만들러 mapper로 가보자.
member-mapper.xml
먼저 Session에 loginInfo라는 정보를 담기 위해서는 SELECT 쿼리를 이용해 조회를 해야한다. SPRING_BOARD_MEMBER에서 만들어주었던 데이터들을 모두 mapper에 컬럼 값으로 넣어주고, java 값으로 property를 세팅해준 후 resultMap의 id 값을 select에 있는 resultMap에 연결시켜주었다.
MemberService 인터페이스
매개변수 및 리턴 타입 결정 방법(우선적으로 실행 시 쿼리를 작성)
매개변수 : 쿼리 실행 시 빈 값을 채울 용도
1. 쿼리에서 채워 줄 값이 없을 경우 : 매개변수 없음
2. 채워줄 값이 하나일 경우
2-1) 채워줄 값이 숫자인 경우 : 매개변수 int형 하나
2-2) 채워줄 값이 문자인 경우 : 매개변수 String형 하나
3. 채워줄 값이 여러개인 경우 : 매개변수는 DTO 객체.
리턴타입 : 쿼리 실행 결과를 어떻게 받아올지에 대한 정의
INSERT, UPDATE, DELETE 쿼리 실행 결과는
리턴타입을 int 혹은 void 사용하면됨. int로 받을 땐 return 필요o void는 필요x
SELECT 쿼리 결과의 리턴타입은 크게 두 가지로 나뉨.
조회결과 데이터가 무조건 한줄만 조회 : DTO 객체.
조회 결과 데이터가 0줄이상 가변적일 경우 : List<DTO> 객체.
MemberServiceImpl 클래스
@Autowired를 사용해 SqlSession을 선언하고
컨트롤러에서도 사용할 수 있게 @Service 어노테이션으로 "memberService" 값을 넣어준다.
다시 MemberController의 login경로를 찾아와 만들었던 login 쿼리를 memberVO에 담아 변수 loginInfo에 저장한다.
이를 보라색 네모로 감싼 출력문으로 출력해보면 사진 맨 아래와 같이 MemberVO가 콘솔창에 뜨면서 확인할 수 있다.
여기서 if문을 사용하여 loginInfo가 null값이 아니면 로그인 성공으로 간주하여,
session 값에 setAttribute를 이용해 loginInfo 데이터를 "loginInfo"라는 이름으로 저장시켜준다.
이후 return "content/member/login_result";로 인해 페이지 이동을한다.
login_result.html
컨트롤러에서 memId 라는 속성을 hidden으로 받아왔다.
th:value 속성을 이용하면 컨트롤러에서 사용했던 VO를 가져올 수 있다.
이렇게 가져온 값을 통해 session.loginInfo의 값이 null 인지 아닌지 확인할 수 있으며,
null 유무를 통해 자바스크립트로 alert을 설정해주고, 페이지 이동처리를 하였다.
로그인을 실패 하면 잘못된 로그인 Id를 가지고 로그인 화면으로 가면서 자동으로 입력받게 해주었고,
로그인이 성공되면 게시판 리스트로 갈 수 있도록 경로를 지정해주었다.
로그인이 성공했을때 보드 게시판 board_list.html로 온 화면이다. 하지만 로그인 기능이 아직 끝나지 않았다.
만약 오른쪽 그림과 같이 LOGOUT을 하면 재 로그인 창이 뜨면서 Session 또한 지워주어야 한다.
로그인 부분은 header에서 관리했으니 해당 html로 가자.
header.html
위와 같이 session에 저장된 loginInfo가 null이 아니면 LOGOUT 표시가 뜬다.
경로를 @로 시작하면서 컨트롤러로 가서 무언가 하게 해놨다. 해당 컨트롤러로 이동해보자.
MemberController 컨트롤러
해당 컨트롤러로 오게 되면, HttpSession session 을 이용해 매개변수 session을 사용할 수 있다.
removeAttribute를 이용하여 loginInfo에 저장된 MemberVO 객체 값들을 지워주면서
다시 board 컨트롤러에 있는 list 경로로 이동할 수 있다.
BoardController 컨트롤러
컨트롤러에 의해 board_list로 온 화면
다음 포스팅에서는 글쓰기에 대해 알아보자.
'✨ Back-end > Spring-Boot' 카테고리의 다른 글
[Spring] 보드게시판 만들기(4) 등록 게시글 리스트 출력 (0) | 2023.03.23 |
---|---|
[Spring] 보드게시판 만들기(3) 글쓰기 (0) | 2023.03.23 |
[Spring] 보드게시판 만들기(1) 회원 가입 (0) | 2023.03.22 |
[Spring] 보드게시판 만들기(0) - 초기 세팅과 Fragment (0) | 2023.03.21 |
[Spring] Ajax(비동기 통신) 사용해보기 (0) | 2023.03.21 |
댓글