jspblog : user login/logout

This commit is contained in:
kim
2021-01-20 22:02:30 +09:00
parent 5ff651a35d
commit b23a62120b
7 changed files with 147 additions and 51 deletions

View File

@@ -54,6 +54,12 @@
<artifactId>gson</artifactId> <artifactId>gson</artifactId>
<version>2.8.6</version> <version>2.8.6</version>
</dependency> </dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies> </dependencies>
<build> <build>

View File

@@ -2,6 +2,7 @@ package com.example.jspblog.domain.user;
import com.example.jspblog.config.DB; import com.example.jspblog.config.DB;
import com.example.jspblog.domain.user.dto.JoinReqDto; import com.example.jspblog.domain.user.dto.JoinReqDto;
import com.example.jspblog.domain.user.dto.LoginReqDto;
import java.sql.Connection; import java.sql.Connection;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
@@ -36,10 +37,6 @@ public class UserDao {
} }
public void usernameCheck() { // 아이디 중복 체크
}
public void findById() { // 회원정보보기 public void findById() { // 회원정보보기
} }
@@ -66,4 +63,35 @@ public class UserDao {
} }
return -1; return -1;
} }
public User findByUsernameAndPassword(LoginReqDto dto) {
String sql = "select id, username, email, address from user where username=? and password=?";
Connection conn = DB.getConnection();
PreparedStatement pstmt = null;
ResultSet rs = null;
if (conn != null) {
try {
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, dto.getUsername());
pstmt.setString(2, dto.getPassword());
rs = pstmt.executeQuery();
if (rs.next()) {
return User.builder()
.id(rs.getInt("id"))
.username(rs.getString("username"))
.email(rs.getString("email"))
.address(rs.getString("address"))
.build();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
DB.close(conn, pstmt, rs);
}
}
return null;
}
} }

View File

@@ -18,7 +18,7 @@ public class UserService {
} }
public User 로그인(LoginReqDto dto) { public User 로그인(LoginReqDto dto) {
return null; return userDao.findByUsernameAndPassword(dto);
} }
public int 회원수정(UpdateReqDto dto) { public int 회원수정(UpdateReqDto dto) {

View File

@@ -1,5 +1,6 @@
package com.example.jspblog.web; package com.example.jspblog.web;
import com.example.jspblog.domain.user.User;
import com.example.jspblog.domain.user.dto.JoinReqDto; import com.example.jspblog.domain.user.dto.JoinReqDto;
import com.example.jspblog.domain.user.dto.LoginReqDto; import com.example.jspblog.domain.user.dto.LoginReqDto;
import com.example.jspblog.service.UserService; import com.example.jspblog.service.UserService;
@@ -29,42 +30,61 @@ public class UserController extends HttpServlet {
String cmd = request.getParameter("cmd"); String cmd = request.getParameter("cmd");
UserService userService = new UserService(); UserService userService = new UserService();
if(cmd.equals("loginForm")) { switch (cmd) {
response.sendRedirect("user/loginForm.jsp"); case "loginForm":
} else if (cmd.equals("login")) { response.sendRedirect("user/loginForm.jsp");
String username = request.getParameter("username"); break;
String password = request.getParameter("password"); case "login": {
LoginReqDto dto = new LoginReqDto(); String username = request.getParameter("username");
dto.setUsername(username); String password = request.getParameter("password");
dto.setPassword(password); LoginReqDto dto = new LoginReqDto();
userService.로그인(dto); dto.setUsername(username);
} else if (cmd.equals("joinForm")) { dto.setPassword(password);
response.sendRedirect("user/joinForm.jsp"); User userEntity = userService.로그인(dto);
} else if (cmd.equals("join")) { if (userEntity != null) {
String username = request.getParameter("username"); request.getSession().setAttribute("principal", userEntity);
String password = request.getParameter("password"); response.sendRedirect("index.jsp");
String email = request.getParameter("email"); } else {
String address = request.getParameter("address"); Script.back(response, "로그인 실패");
JoinReqDto dto = new JoinReqDto(); }
dto.setUsername(username); break;
dto.setPassword(password);
dto.setEmail(email);
dto.setAddress(address);
int result = userService.회원가입(dto);
if (result == 1) {
response.sendRedirect("index.jsp");
} else {
Script.back(response, "회원가입실패");
} }
} else if (cmd.equals("usernameCheck")) { case "joinForm":
BufferedReader br = request.getReader(); response.sendRedirect("user/joinForm.jsp");
String username = br.readLine(); break;
int result = userService.유저네임중복체크(username); case "join": {
PrintWriter out = response.getWriter(); String username = request.getParameter("username");
if (result == 1) { String password = request.getParameter("password");
out.print("ok"); String email = request.getParameter("email");
} else { String address = request.getParameter("address");
out.print("fail"); JoinReqDto dto = new JoinReqDto();
dto.setUsername(username);
dto.setPassword(password);
dto.setEmail(email);
dto.setAddress(address);
int result = userService.회원가입(dto);
if (result == 1) {
response.sendRedirect("index.jsp");
} else {
Script.back(response, "회원가입실패");
}
break;
}
case "usernameCheck": {
BufferedReader br = request.getReader();
String username = br.readLine();
int result = userService.유저네임중복체크(username);
PrintWriter out = response.getWriter();
if (result == 1) {
out.print("ok");
} else {
out.print("fail");
}
break;
}
case "logout": {
request.getSession().invalidate();
response.sendRedirect("index.jsp");
} }
} }
} }

View File

@@ -1,6 +1,9 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ include file="../layout/header.jsp"%> <%@ include file="../layout/header.jsp"%>
<h1>세션 테스트</h1>
로그인 유저네임 : ${sessionScope.principal.username}
</body> </body>
</html> </html>

View File

@@ -1,4 +1,6 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
@@ -13,20 +15,40 @@
<body> <body>
<nav class="navbar navbar-expand-md bg-dark navbar-dark"> <nav class="navbar navbar-expand-md bg-dark navbar-dark">
<a class="navbar-brand" href="#">블로그</a> <a class="navbar-brand" href="${pageContext.request.contextPath}/index.jsp">블로그</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#collapsibleNavbar"> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#collapsibleNavbar">
<span class="navbar-toggler-icon"></span> <span class="navbar-toggler-icon"></span>
</button> </button>
<div class="collapse navbar-collapse" id="collapsibleNavbar">
<ul class="navbar-nav"> <c:choose>
<li class="nav-item"> <c:when test="${sessionScope.principal != null}">
<a class="nav-link" href="${pageContext.request.contextPath}/user?cmd=joinForm">회원가입</a> <div class="collapse navbar-collapse" id="collapsibleNavbar">
</li> <ul class="navbar-nav">
<li class="nav-item"> <li class="nav-item">
<a class="nav-link" href="${pageContext.request.contextPath}/user?cmd=loginForm">로그인</a> <a class="nav-link" href="${pageContext.request.contextPath}/board?cmd=writeForm">글쓰기</a>
</li> </li>
</ul> <li class="nav-item">
</div> <a class="nav-link" href="${pageContext.request.contextPath}/user?cmd=updateForm">회원정보</a>
</li>
<li class="nav-item">
<a class="nav-link" href="${pageContext.request.contextPath}/user?cmd=logout">로그아웃</a>
</li>
</ul>
</div>
</c:when>
<c:otherwise>
<div class="collapse navbar-collapse" id="collapsibleNavbar">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" href="${pageContext.request.contextPath}/user?cmd=joinForm">회원가입</a>
</li>
<li class="nav-item">
<a class="nav-link" href="${pageContext.request.contextPath}/user?cmd=loginForm">로그인</a>
</li>
</ul>
</div>
</c:otherwise>
</c:choose>
</nav> </nav>
<br> <br>

View File

@@ -1,5 +1,22 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ include file="../layout/header.jsp"%> <%@ include file="../layout/header.jsp"%>
<div class="container">
<form action="${pageContext.request.contextPath}/user?cmd=login" method="post">
<div class="form-group">
<label for="username">Username:</label>
<input name="username" type="text" class="form-control" placeholder="Enter username" id="username" required>
</div>
<div class="form-group">
<label for="pwd">Password:</label>
<input name="password" type="password" class="form-control" placeholder="Enter password" id="pwd" required>
</div>
<button type="submit" class="btn btn-primary">로그인</button>
</form>
</div>
</body> </body>
</html> </html>