반응형
공용 에러 페이지 등록
src/main/webapp/WEB-INF/web.xml 에 아래 코드를 추가해줍니다.
<!-- 공용 에러페이지 등록 -->
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/WEB-INF/views/common/errorPage.jsp</location>
</error-page>
그리고 src/main/webapp/WEB-INF/views/common 폴더에 errorPage.jsp를 생성합니다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="path" value="${pageContext.request.contextPath}"/>
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="https://fonts.googleapis.com/css?family=Fredoka+One" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Raleway:400,700" rel="stylesheet">
<meta charset="UTF-8">
<title>errorPage</title>
<link href="${path}/resources/css/home/error.css" rel="stylesheet"/>
</head>
<body>
<div id="notfound">
<div class="notfound">
<div class="notfound-404">
<h1>Error</h1>
</div>
<%-- <h2><%= request.getAttribute("msg") %></h2> --%>
<!-- el로 표현하기-->
<h2>${ msg }</h2>
<a href="/swan">
<span class="arrow"></span>
SWAN으로 돌아가기
</a>
</div>
</div>
</body>
</html>
이제 공용 에러페이지 등록이 끝났습니다. controller에서 throws Exception을 발생시키면 아래와 같은 화면이 공통적으로 뜨게 됩니다.
비밀번호 암호화가 적용된 최종 로그인
암호화까지 적용시켜 회원가입에 성공했으나 로그인을 하면 에러 페이지가 뜹니다. 이는 로그인이 완벽한 로그인이 아니기 때문입니다.
이제 암호화가 적용된 최종 로그인을 완성해보겠습니다.
1. MemberMapper.xml
먼저 MemberMapper.xml에서 로그인과 관련된 쿼리를 수정하겠습니다.
이전엔 아이디와 비밀번호를 비교하고 활성화 상태가 'Y'인 회원을 가져왔는데, 이젠 아이디만 비교하고 비밀번호는 비교하지 않는 상태로 가져오도록 하겠습니다.
비밀번호 일치 여부는 controller에서 진행했습니다.
<!-- 로그인 -->
<select id="login" resultType="com.swan.model.MemberVO">
select *
from member
<!-- where id=#{id} and pwd=#{pwd} and member_status='Y' -->
where id=#{id} and member_status='Y'
</select>
2. MemberController.java
mathes() 메소드
암호화가 된 비밀번호와 원본 비밀번호를 비교해서 일치하면 true, 일치하지 않으면 false를 반환하는 메서드를 작성합니다.
// 로그인
@RequestMapping(value = "login.me", method = RequestMethod.POST)
public String loginPOST(HttpServletRequest request, MemberVO member, Model model, RedirectAttributes rttr)
throws Exception {
// System.out.println("login 메서드 진입");
// System.out.println("전달된 데이터 : " + member);
HttpSession session = request.getSession();
// 암호화해서 얻은 비밀번호로 교체
System.out.println(bcrypt.encode(member.getPwd()));
// login()를 요청하게 되면 MemberMapper.java를 거쳐 로그인 쿼리가 실행되게 되고 그 결과 값이 담긴 MemberVO
// 객체를 반환 받아서 변수 lvo에 저장
MemberVO lvo = memberService.login(member);
// 비밀번호 암호화한 회원과 match 시키기
// 어떻게 비교하는지는 보완상 비밀이며 matches가 내부 로직으로 비교해줌
boolean match = bcrypt.matches(member.getPwd(), lvo.getPwd());
System.out.println(lvo);
if (match) {
session.setAttribute("member", lvo);
model.addAttribute("lvo", member); // 일치하는 아이디, 비밀번호 경우 (로그인 성공)
return "redirect:/swan";
} else { // 일치하지 않는 아이디, 비밀번호 입력 경우
int result = 0;
rttr.addFlashAttribute("result", result);
return "redirect:/member/login";
}
}
반응형
'😎 STS3 Spring 쇼핑몰' 카테고리의 다른 글
STS3 쇼핑몰 프로젝트[11] 아이디 찾기 (0) | 2022.08.02 |
---|---|
STS3 쇼핑몰 프로젝트[10] 로그아웃 (0) | 2022.08.02 |
STS3 쇼핑몰 프로젝트[9] 인코딩 적용 및 비밀번호 암호화(1) (0) | 2022.08.01 |
STS3 쇼핑몰 프로젝트[8] 로그인 기능 구현(페이지 데이터 처리) (0) | 2022.08.01 |
STS3 쇼핑몰 프로젝트[8] 로그인 기능 구현(페이지, 메서드) (0) | 2022.08.01 |