로그인처리
1. 로그인 링크 설정
home.jsp 파일에 로그인 링크 추가
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@include file="./include/header.jsp"%>
<section class="content">
<div class="box">
<div class="box-header with-border">
<a href="/user/register"><h3 class="box-title">회원가입</h3></a>
<c:if test="${user==null}">
<div class="box-header with-border">
<a href="user/login"><h3 class="boxtitle">로그인</h3></a>
</div>
</c:if>
<c:if test="${user!=null }">
<div class="box-header with-border">
<a href="user/logout"><h3 class="boxtitle">로그아웃</h3></a>
</div>
</c:if>
</div>
</div>
</section>
<%@include file="include/footer.jsp"%>
UserController 클래스에 로그인 요청이 왔을 때 로그인 페이지로 이동을 처리하는 메소드를 구현
@RequestMapping(value = "user/login", method = RequestMethod.GET)
public void login(Model model) {
}
views/user 디렉토리에 login.jsp 파일을 만들고 작성
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="../include/header.jsp"%>
<div class="container">
<div class="row">
<div class="col-md-4"></div>
<div class="col-md-4">
<div class="login-box well">
<form accept-charset="UTF-8" role="form" method="post" action="login">
<legend>로그인 </legend>
<div style='color: red'>${msg}</div>
<div class="form-group">
<label for="email">EMAIL</label>
<input type="email" name="email" id="email" placeholder="email을 입력하세요" class="form-control" />
</div>
<div class="form-group">
<label for="password"> 비밀번호</label>
<input type="password" name="pw" id="pw" placeholder="비밀번호를 입력하세요" class="form-control" />
</div>
<div class="form-group">
<input type="submit" class="btn btn-primary btn-login-submit btn-block m-t-md" value="로그인" />
</div>
<div class="form-group">
<a href="register" class="btn btn-warning btn-block m-t-md">회원가입</a>
</div>
<div class="form-group">
<a href="/" class="btn btn-success btn-block m-t-md">메인으로</a>
</div>
</form>
</div>
</div>
<div class="col-md-4"></div>
</div>
</div>
<%@ include file="../include/footer.jsp"%>
2. 로그인 처리
user.xml 파일에 로그인처리 sql을 생성
<!-- 로그인 처리를 위한 sql -->
<select id="login" resultType="User" parameterType="User">
select email, nickname, image, pw
from springuser
where email=#{email}
</select>
UserDao 클래스에 로그인 메소드를 구현
public User login(User user) {
return sqlSession.selectOne("user.login", user);
}
UsreService 인터페이스에 로그인 처리 메소드를 선언
public User login(User user);
UsreServiceImpl 클래스를 생성하고 로그인 메소드를 구현
@Override
public User login(User user) {
User loginUser = userDao.login(user);
if (loginUser != null) {
if (BCrypt.checkpw(user.getPw(), loginUser.getPw())) {
loginUser.setPw(null);
} else {
loginUser = null;
}
}
return loginUser;
}
UserController 클래스에 로그인을 처리하는 메소드를 구현
@RequestMapping(value = "user/login", method = RequestMethod.POST)
public String login(User user, HttpSession session, Model model, RedirectAttributes attr) {
User userVO = userService.login(user);
if (userVO == null) {
attr.addFlashAttribute("msg", "없는 이메일이거나 비밀번호가 잘못되었습니다.");
return "redirect:login";
}
session.setAttribute("user", userVO);
return "redirect:/";
}
header.jsp 파일의 메뉴 부분 수정
<body class="skin-blue sidebar-mini">
<div class="wrapper">
<header class="main-header">
<div class="page-header">
<h1>Spring MVC 게시판</h1>
</div>
</header>
</div>
<aside class="main-sidebar">
<section class="sidebar">
<ul class="nav nav-tabs">
<li role="presentation" class="active"><a href="#">메인</a></li>
<li role="presentation"><a href="#">목록보기 </a></li>
<li role="presentation"><a href="#">게시물 쓰기 </a></li>
<c:if test="${user == null}">
<li role="presentation">
<a href="user/register">회원가입</a></li>
</c:if>
<c:if test="${user != null}">
<li role="presentation">
<a href="#">
<span class="badge">
<img src="${pageContext.request.contextPath}/userimage/${user.image}" width="20" height="20" />
</span>
${user.nickname}님
</a>
</li>
</c:if>
</ul>
</section>
</aside>
</body>
</html>
UserController 클래스에 로그아웃을 처리하는 메소드를 작성
@RequestMapping(value = "user/logout", method = RequestMethod.GET)
public String logout(HttpSession session) {
session.invalidate();
return "redirect:/";
}
3. 세션 만료 시간 설정
web.xml 파일에 설정
<session-config>
<session-timeout>5</session-timeout>
</session-config>