일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- DB공유하기
- jsp
- 주문조회페이지
- 상품목록보기
- 상품삭제
- 국비프로젝트
- 쇼핑몰프로젝트
- 스프링부트
- ajax중복체크
- html
- 생활코딩
- 상품명중복체크
- 쇼핑몰만들기
- 상품수정
- 주문취소하기기능
- 유저삭제
- 구매목록보기
- 쇼핑몰홈페이지만들기
- 권한체크
- 아이디중복체크
- vscode삭제
- 쇼핑몰주문취소
- 생활코딩javascript
- 구매목록페이지
- 자바스크립트
- 상품상세페이지
- 마이페이지만들기
- vscode폴더삭제
- 파이널프로젝트
- javascript
- Today
- Total
INTP의 멋대로 개발 세상
[📚상품 구매 사이트 4단계] MySQL DB 연결 없이 관리자 페이지 구현하기 - 2. 관리자 로그인 구현하기 본문
[📚상품 구매 사이트 4단계] MySQL DB 연결 없이 관리자 페이지 구현하기 - 2. 관리자 로그인 구현하기
인팁구름 2023. 4. 25. 21:03⏬ 4단계 프로젝트 세팅 보러가기 (전체 코드) ⏬
[연습📚상품 구매 사이트 4단계] MySQL DB 연결 없이 관리자 페이지 구현하기 - 1. 프로젝트 세팅
⏬전체 코드는 아래의 깃 허브에😚⏬ GitHub - JungminK1m/Springboot-Product-Study-V4 Contribute to JungminK1m/Springboot-Product-Study-V4 development by creating an account on GitHub. github.com 드디어 5단계 중 4단계로 넘어왔다!
whiteclouds-dev.tistory.com
관리자 로그인 기능을 구현할 것이다.
사실 구매자와 관리자 로그인 페이지를 따로 나눌 필요는 없고,
페이지 하나를 공유해서 써도 된다. (로그인 하고 나서의 화면만 다르면 되니까)
관리자는 회원가입 기능이 없고 DB 더미데이터에 넣어놓은 값으로만 로그인 가능하다.
관리자 회원가입이라는 말 자체가 이상함.
구매자 로그인은 3단계에 구현되어 있기에 생략하겠다🙄(똑같은 코드이다)
⏬ 구매자 로그인 기능 만들러 가기 ⏬
[연습📚상품 구매 사이트 3단계] 구매자 서버 만들기 - 3. header, footer, 로그인/로그아웃 구현
더미 데이터가 있기 때문에 로그인 기능을 먼저 만들어 보자😏 나는 localhost:8080/ 주소를 로그인 화면으로 사용했다 (주소 입력하기 귀찮아서..) 📺 화면 구현📺 로그인 화면 로그인 아직 회원
whiteclouds-dev.tistory.com
이전 단계들과는 다르게, USER 클래스에 role이라는 것이 추가되었다.
이 role은 일반 유저가 가입할 때 "직접" 입력하지는 않지만,
회원가입할 때 쓰는 insert 메서드에
무조건 role은 'USER'로 저장되게끔 만들어져 있기 때문에
DB에 무조건 일반 유저의 role값은 'USER'라고 저장될 것이다.
📺 화면 설계📺
adminLoginForm.jsp
당연한 소리이지만, 실제 서비스 할 때에는 input 태그 안에 value 값 넣어놓으면 안된다!!
나는 여러 번 테스트 해보는데 그 때마다 타자 치기 귀찮아서(...) 넣어놓았따
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ include file="../layout/header.jsp" %>
<div class="container">
<form action="/adminLogin" method="post" name="form">
<div class="mb-3 mt-3">
<input type="text" class="form-control" placeholder="username" name="userName" value="admin" />
</div>
<div class="mb-3">
<input type="password" class="form-control" placeholder="password" name="userPassword" value="1234" />
</div>
<button type="submit" class="btn btn-primary">
관리자 로그인
</button>
</form>
</div>
<%@ include file="../layout/footer.jsp" %>
🎤 코드 리뷰 🎤
DTO는 내용이 같더라도 따로따로 관리하는 게 좋다
(예를 들어, 나중에 admin에만 기능을 추가하게 되는 일이 있을 수 있으니까)
(근데 귀찮아서 안만들때도 많음....ㅎ..실무에선 꼭!! 따로따로 관리할 것!)
AdminLoginDto를 매개변수로 가져오고,
DTO 안에 userName과 userPassword를 가져와서 빈 칸인지 아닌지 유효성 체크를 한다
이런 식으로 userName과 userPassword를 같이 적어줘도 되는데,
나는 개인적으로 홈페이지를 이용할 때 둘 중에 뭐가 틀렸는 지 알려주면 좋겠어서 따로따로 유효성 체크를 하게 만드는 편이다.
(사실 빈칸 확인하는 건 육안(?)으로도 잘 보이기 때문에 그럴 필요는 없겠다만은..)
adminLoginDto를 레파지토리의 adminLogin 메소드에 넣고 결과를 userPS에 담는다.
담은 userPS가 없지 않거나 (null이 아니거나 = 있다) + userPS의 role(권한)이 "ADMIN"이라면
세션에 userPS를 "principal"로 저장하고
로그인이 성공했으니 상품 목록 페이지("/product") 주소로 리다이렉트 해 준다.
위 조건이 성립하지 않는다면, 없는 유저이거나 role이 "ADMIN"이 아니라는 뜻이므로
조건문 밖으로 빠져나와 다시 로그인 폼으로 보내준다. (CustomException으로 처리해줘도 된다.)
adminLogin 메서드이다. DTO를 매개변수로 받는다.
adminLogin 메서드는 받은 DTO의 userName과 DB의 userName과 일치하는지와
role이 'ADMIN' 인 것을 동시에 만족한다는 조건하에 user 테이블의 모든 컬럼값을 찾아주는 메서드이다.
일치하면 위 코드와 같이 세션에 로그인 정보가 저장되고, 상품 목록 페이지로 보내준다.
📊 결과 확인 📊
user 테이블엔 두 개의 USER 와 admin이라는 관리자 아이디가 하나 존재한다.
관리자 로그인 시도
잘 들어와짐!
관리자 로그인 페이지에 일반 USER 의 아이디와 패스워드를 입력하면
안넘어가지고 코드에 쓴 대로 로그인 페이지로 리다이렉트 됨.
(이 부분은 리다이렉트보다 alert창으로 처리하는 방법이 더 좋겠음!)
'KDT 풀스택 국비 과정 > 파이널 프로젝트(미니)' 카테고리의 다른 글
[📚상품 구매 사이트 4단계] MySQL DB 연결 없이 관리자 페이지 구현하기 - 4. 관리자 상품 등록하기, 수정하기, 삭제하기 (0) | 2023.04.26 |
---|---|
[📚상품 구매 사이트 4단계] MySQL DB 연결 없이 관리자 페이지 구현하기 - 3. 권한에 따른 header, 상품 상세 페이지 변경 (0) | 2023.04.26 |
[📚상품 구매 사이트 4단계] MySQL DB 연결 없이 관리자 페이지 구현하기 - 1. 프로젝트 세팅 (0) | 2023.04.24 |
[📚상품 구매 사이트 3단계] 판매자 서버 만들기 - MySQL 포트 연결하기 (0) | 2023.04.24 |
[📚상품 구매 사이트 3단계] 구매자 서버 만들기 - 7. 주문 취소하기 기능 만들기 (0) | 2023.04.24 |