Project/Final (20.10.05-20.11.17)

2020.11.06.(금) 파이널 프로젝트 - (비밀번호 일치할 경우) 마이페이지 탈퇴, 운영자페이지 강제탈퇴 처리(모달에 값 보내기, 활성화='N')

myspace 2020. 11. 6. 13:54

(비밀번호 일치할 경우) 마이페이지 탈퇴

 

0. LoginController.java

	/* 일반 로그인 : 일반 로그인 ID 혹은 PW를 입력하지 않았거나 틀렸을 때 (userlogin.jsp의 javascript와 연결) */
	@RequestMapping(value="/ajaxlogin", method=RequestMethod.POST)
	@ResponseBody
	public Map<String, Boolean> ajaxLogin(@RequestBody UserInfoDto dto, HttpSession session){
		logger.info(">> [CONTROLLER-USERINFO] ajax login");
		
		UserInfoDto res = userInfoBiz.selectOne(dto);
		logger.info("user role : " + res.getUser_role());
		boolean check = false;
		if (res != null) {
			// 로그인 값을 계속 가지고 있는 Session
			session.setAttribute("login", res);
			check = true;
		}
		
		Map<String, Boolean> map = new HashMap<String, Boolean>();
		map.put("check", check);
		
		return map;
	}

1. MypageController.java

package com.minibean.timewizard.controller;

import javax.servlet.http.HttpSession;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.minibean.timewizard.model.biz.UserInfoBiz;
import com.minibean.timewizard.model.dto.UserInfoDto;

@Controller
public class MypageController {
	
	private Logger logger = LoggerFactory.getLogger(MypageController.class);
	
	@Autowired
	private UserInfoBiz userinfoBiz;
	
	@RequestMapping("/mypage")
	public String Mypage() {
		logger.info("[mypage]");
		return "mypage";
	}
	
	@RequestMapping("/userdeletepage")
	public String UserDeletePage(Model model, @RequestParam int user_no) {
		logger.info("[admin role change]");

		model.addAttribute("dto", userinfoBiz.selectOne(user_no));
		
		return "userdeletepage";
	}
	
	@RequestMapping("/userdeleteres")
	public String UserDelete(UserInfoDto dto, HttpSession session, @RequestParam int user_no) {
		logger.info("[user delete Reusult]");
		
		// login이라는 session에서 가져오는 것. LoginController.java의 session.setAttribute("login", res); 이 코드임.
		UserInfoDto user = (UserInfoDto) session.getAttribute("login");
		String user_pw = user.getUser_pw();
		String new_pw = dto.getUser_pw();
		
		logger.info("user_pw :"+user_pw);
		logger.info("new_pw :"+new_pw);
		
		//비밀번호 불일치로 탈퇴 실패
		if(!(user_pw.equals(new_pw))) {
			return "redirect:mypage";
		} else {
		
			int res = userinfoBiz.delete(user_no);
			
			logger.info("탈퇴 res :"+res);
			
			if(res != 0) {
				System.out.println("탈퇴 성공");
			} else {
				System.out.println("탈퇴 실패");
			}
			
			session.invalidate();
			return "redirect:main";
		}
	}

}

2. user_info-mapper.xml

	<update id="delete" parameterType="int">
		UPDATE USER_INFO SET USER_ACTIVE = 'N'
		WHERE USER_NO = #{user_no}
	</update>

3. mypage.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
	
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>mypage</title>

<link href="https://fonts.googleapis.com/css2?family=Source+Code+Pro&family=Source+Sans+Pro:wght@200;400&family=Staatliches&display=swap" rel="stylesheet">
<link href="resources/css/userpage.css" rel="stylesheet">
<script type="text/javascript" src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script src="resources/js/mypage.js" defer></script>
<script src="https://kit.fontawesome.com/3049a69bf8.js" crossorigin="anonymous"></script>

<script type="text/javascript">

	const elImage = document.querySelector("#reviewImageFileOpenInput");
	elImage.addEventListener("change", (evt) => {
	  const image = evt.target.files[0];
	  if(!validImageType(image)) { 
	    console.warn("invalide image file type");
	    return;
	  }
	});
	
	function valideImageType(image) {
	  const result = ([ 'image/jpeg',
	                    'image/png',
	                    'image/jpg' ].indexOf(image.type) > -1);
	  return result;
	}
	
</script>

</head>
<body>
	
	<div class="mypagebox">
		<div class="mypagemenu" align="center">
			<div class="profile" onclick="">프로필 사진부분</div>
			
			<table>
				<tr>
					<td>ID</td>
					<td><input type="text" name="" size=20 readonly value="${login.user_id }"></td>
				</tr>
				<tr>
					<td>PW</td>
					<td><input type="password" name="" size=20></td>
				</tr>
				<tr>
					<td>NAME</td>
					<td><input type="text" name="" size=20 readonly value="${login.user_name }"></td>
				</tr>
				<tr>
					<td>EMAIL</td>
					<td><input type="email" name="" size=20 value="${login.user_email }"></td>
				</tr>
				<tr>
					<td colspan="2" align="right">
						<input type="submit" class="submitbox" value="수정" onclick="" />
						<a href="userdeletepage?user_no=${login.user_no }">탈퇴</a>
					</td>
				</tr>
			</table>
		</div>
	
		<div class="mypagemenu" align="center">
			<table>
			<!-- 구현할때 사용하면 될듯!
				<c:choose>
					<c:when test="">
						<tr>
							<th>저장할 수 있는 timelapse가 없습니다.</th>
						</tr>
					</c:when>
					<c:otherwise>
						<c:forEach items="" >
							<tr>
								<td>날짜 및 시간</td>
							</tr>
						</c:forEach>
					</c:otherwise>
				</c:choose>
				-->
				<tr>
					<td>날짜 및 시간</td>
					<td><a class="save"><i class="fas fa-save"></i></a></td>
				</tr>
				<tr>
					<td>날짜 및 시간</td>
					<td><a class="save"><i class="fas fa-save"></i></a></td>
				</tr>
			</table>
		</div>
		
		<div class="mypagemenu" align="center">
			<table>
				<tr>
					<td><h5>스트리밍 이용</h5></td>
					<td colspan="3" align="center">9,900원</td>
				</tr>
				<tr>
					<td align="center"><h5>timelapse</h5></td>
					<td align="center">1</td>
					<td align="center">5</td>
					<td align="center">10</td>
				</tr>
				<tr>
					<td>(남은 횟수)</td>
					<td>1000원</td>
					<td>5000원</td>
					<td>9000원</td>
				</tr>
			</table>
		</div>
		<div class="home"><a href="main"><i class="fab fa-tumblr-square"></i></a></div>
	</div>


</body>
</html>

4. userdeletepage.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c"  uri="http://java.sun.com/jsp/jstl/core"%>
<% request.setCharacterEncoding("UTF-8"); %>
<% response.setContentType("text/html; charset=UTF-8"); %>
<%@page import="com.minibean.timewizard.model.dto.UserInfoDto"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css" href="resources/css/userdeletepage.css">
<script src="resources/js/userdeletepage.js" defer></script>
</head>
<body>
	<section id="container">
			<form action="userdeleteres" method="post">
			<input type="hidden" name="user_no" value="${dto.user_no}">
				<div class="deletebox">
					<label class="control-label" for="userId">아이디</label>
					<input class="form-control" type="text" id="user_id" name="user_id" value="${dto.user_id }" readonly="readonly"/>
				</div>
				<div class="deletebox">
					<label class="control-label" for="userPass">패스워드</label>
					<input class="form-control" type="password" id="user_pw" name="user_pw" />
				</div>
				<div class="deletebox">
					<label class="control-label" for="userName">성명</label>
					<input class="form-control" type="text" id="user_name" name="user_name" value="${dto.user_name }" readonly="readonly"/>
				</div>
				<div class="deletebox">
					<button class="btn btn-success" type="submit" id="submit">회원탈퇴</button>
					<button class="cancle" type="button" onclick="location.href='mypage'">취소</button>
				</div>
			<div>
				<c:if test="${msg == false}">
					비밀번호가 맞지 않습니다.
				</c:if>
			</div>
			</form>
		</section>
</body>
</html>

운영자페이지 강제탈퇴 처리(모달에 값 보내기, 활성화='N')

1. AdminController.java

package com.minibean.timewizard.controller;

import javax.servlet.http.HttpSession;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.minibean.timewizard.model.biz.UserInfoBiz;
import com.minibean.timewizard.model.dto.UserInfoDto;

@Controller
public class AdminController {
	
	private Logger logger = LoggerFactory.getLogger(AdminController.class);
	
	@Autowired
	private UserInfoBiz userinfoBiz;
	
	@RequestMapping(value="/adminpage")
	public String adminPage(Model model) {
		logger.info("[adminpage]");
		
		model.addAttribute("list", userinfoBiz.selectList());
		
		return "adminpage";
	}
	
	/* 관리자페이지에서 등급변경 버튼 누르면 등급변경페이지로 이동 */
	@RequestMapping(value="/adminrole")
	public String adminRole(Model model, @RequestParam int user_no) {
		logger.info("[admin role change]");

		model.addAttribute("dto", userinfoBiz.selectOne(user_no));
		
		return "adminrole";
	}
	
	/* 등급변경페이지에서 변경완료 버튼 누르면 등급 변경 됨 */
	@RequestMapping(value="/adminroleres")
	public String adminRoleRes(UserInfoDto dto, UserInfoDto user_no, @RequestParam String user_role) {
		logger.info("[admin role change result]");

		int res = userinfoBiz.updateRoleRes(dto);

		if(res != 0) {
			System.out.println("등급 변경 성공");
		} else {
			System.out.println("등급 변경 실패");
		}
		
		return "redirect:adminpage?user_role="+dto.getUser_role();
	}
	
	/* 비활성화 버튼 누르면 활성화=N */
	@RequestMapping(value="/admindelete")
	public String adminDelete(UserInfoDto dto, @RequestParam int user_no) {
		logger.info("[admin member delete]");
		
		logger.info("user_no : "+user_no);
		logger.info("dto : "+dto);
        
        int res = userinfoBiz.delete(user_no);
        
		  if(res != 0) {
			  System.out.println("강제탈퇴 성공");
		  } else {
			  System.out.println("강제탈퇴 실패");
		  }
		 
		// adminpage.jsp에서 user_no 값을 받아온 상태로 adminpage의 리스트에 나온 user_active 값을 활성화=N으로 바꾸기
		return "redirect:adminpage?user_no="+dto.getUser_active();
		
	}
	
}
	

2. adminpage.jsp

<%@page import="com.minibean.timewizard.model.dto.UserInfoDto"%>
<%@page import="java.util.Date"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c"  uri="http://java.sun.com/jsp/jstl/core"%>
<% request.setCharacterEncoding("UTF-8"); %>
<% response.setContentType("text/html; charset=UTF-8"); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Admin Page</title>
<script src="http://code.jquery.com/jquery-3.5.1.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap-theme.min.css">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script>
<link rel="stylesheet" type="text/css" href="resources/css/adminpage.css">
<script src="resources/js/adminpage.js" defer></script>
</head>
<body>

	<div class="adminbox">
		<h1>관리자 페이지</h1>
		<a href="main?user_no=${login.user_no }">돌아가기</a>
	</div>
	
	<form action="admindelete" method="post">
	<div class="adminbox" id="userlist">
		<table border="1">
			<col width="100"/>
			<col width="100"/>
			<col width="100"/>
			<col width="100"/>
			<col width="100"/>
			<col width="100"/>
			<col width="100"/>
			<col width="100"/>
			<col width="100"/>
				<tr>
					<td id="title" colspan="10">회원 목록 조회
				</tr>
				<tr>
					<td>번    호</td>
					<td>I   D</td>
					<td>P   W</td>
					<td>이     름</td>
					<td>이 메 일</td>
					<td>활 성 화</td>
					<td>가입날짜</td>
					<td>등     급</td>
					<td>등급변경</td>
					<td>강제탈퇴</td>
				</tr>
				<c:forEach var="dto" items="${list }">
				<tr>
					<td>${dto.user_no }</td>
					<td>${dto.user_id }</td>
					<td>${dto.user_pw }</td>
					<td>${dto.user_name }</td>
					<td>${dto.user_email }</td>
					<td>${dto.user_active }</td>
					<td>${dto.user_regdate }</td>
					<td>${dto.user_role }</td>
					<td><a href="adminrole?user_no=${dto.user_no }">등급변경</a></td>
                    <!-- 강제탈퇴 버튼 누르면 모달창으로 data-value="${dto.user_no }" 값 넘어감 -->
					<td><button type="button" name="disablebtn" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal" data-value="${dto.user_no }">강제탈퇴</button></td>
				</tr>
				</c:forEach>
		</table>
		
		<!-- Modal -->
		<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
		  <div class="modal-dialog" role="document">
		    <div class="modal-content">
		      <div class="modal-header">
		        <h5 class="modal-title" id="exampleModalLabel">회원 강제탈퇴</h5>
		        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
		          <span aria-hidden="true">&times;</span>
		        </button>
		        </div>
		        <div class="modal-body">
		        	회원 아이디를 비활성화 하겠습니까?
                    <!-- 모달창에서 user_no라는 값을 받아줌 -->
		        	<input type="hidden" id="userdelete" name="user_no">
		        </div>
		      <div class="modal-footer">
		      	<input id="disbtn" class="btn" type="submit" value="비활성화 " />
		       	<button type="button" class="btn btn-secondary" data-dismiss="modal">취소</button>
		      </div>
		    </div>
		  </div>
		</div>
	</div>
</body>
</html>

3. adminpage.js

// 모달창에서 '비활성화' 버튼 누르면 작동함
// (input 버튼이니까 form action="admindelete"을 통해서 Controller로 넘어감)

$(document).on("click","button[name='disablebtn']",function(){
	var num = $(this).data('value');
	$("#userdelete").val(num);
});

 

참고 사이트

oneshottenkill.tistory.com/301

 

Modal에 값 전달

Link 1 data-toggle="modal" data-id="ISBN564541" title="Add this item" class="open-AddBookDialog btn btn-primary" href="#addBookDialog">test Link 2 data-toggle="modal" data-id="ISBN-001122" title="Ad..

oneshottenkill.tistory.com