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">×</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