# 로그아웃
- 로그아웃은 session에 저장되어 있는 값을 제거하면 끝.
package com.kh.finalkh11.controller;
import java.io.IOException;
import java.net.URISyntaxException;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
import javax.mail.internet.MimeMessage;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import com.kh.finalkh11.component.RandomComponent;
import com.kh.finalkh11.constant.SessionConstant;
import com.kh.finalkh11.dto.ImgDto;
import com.kh.finalkh11.dto.MemberDto;
import com.kh.finalkh11.dto.PaymentDto;
import com.kh.finalkh11.repo.ImgRepo;
import com.kh.finalkh11.repo.MemberRepo;
import com.kh.finalkh11.repo.PaymentRepo;
import com.kh.finalkh11.repo.ReserveRepo;
import com.kh.finalkh11.service.KakaoPayService;
import com.kh.finalkh11.service.MemberService;
import com.kh.finalkh11.vo.KakaoPayCancelRequestVO;
import com.kh.finalkh11.vo.KakaoPayCancelResponseVO;
@Controller
@RequestMapping("/member")
public class MemberController {
@Autowired
private MemberRepo memberRepo;
@Autowired
private ImgRepo imgRepo;
@Autowired
private MemberService memberService;
@Autowired //메일
private RandomComponent randomComponent;
@Autowired //메일
private JavaMailSender sender;
@Autowired
private PasswordEncoder encoder;
@Autowired
private KakaoPayService kakaoPayService;
@Autowired
private PaymentRepo paymentRepo;
@Autowired
private ReserveRepo reserveRepo;
@GetMapping("/logout") //로그아웃
public String logout(HttpSession session) {
session.removeAttribute(SessionConstant.memberId);
session.removeAttribute(SessionConstant.memberLevel);
session.removeAttribute("memberName");
return "redirect:/matchBoard/list";
}
}
# 회원탈퇴
<mapper작성>
<?xml version="1.0" encoding="UTF-8"?>
<!-- ↑ 이것은 XML 헤더라고 한다(반드시 첫 번째 줄에 위치) -->
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- ↑ mapper 문법을 인식할 수 있는 문법 정보 import -->
<!-- mapper에는 SQL 구문을 작성하고 namespace는 구분을 위한 별칭 -->
<mapper namespace="member">
<!--
select 구문을 select 태그에 작성
- id : 외부에서 부를 이름
- resultType : 이 구문을 통해서 만들 결과 형태(자동 변환 결과) - select 전용(출력해서 봐야하니깐 반환형 dto),update,delete,insert는 입력만 해서 필요없음
- parameterType : 이 구문을 실행하기 위해 필요한 형태(생략 가능)
-->
<!-- 회원탈퇴 -->
<delete id="memberDelete">
delete member where member_id=#{memberId}
</delete>
</mapper>
<MemberRepo>
package com.kh.finalkh11.repo;
import java.util.List;
import com.kh.finalkh11.dto.MemberDto;
import com.kh.finalkh11.vo.AdminPaginationVO;
public interface MemberRepo {
boolean delete(String memberId);//회원탈퇴
}
<MemberRepoImpl>
package com.kh.finalkh11.repo;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Repository;
import com.kh.finalkh11.dto.MemberDto;
import com.kh.finalkh11.vo.AdminPaginationVO;
@Repository
public class MemberRepoImpl implements MemberRepo{
@Autowired
private SqlSession sqlSession;
@Override
public boolean delete(String memberId) {
return sqlSession.delete("member.memberDelete",memberId)>0;
}
}
<MemberController>
//회원 탈퇴
@GetMapping("/exit")
public String exit(HttpSession session) {
return "member/exit";
}
@PostMapping("/exit")
public String exit(
HttpSession session, //회원정보가 저장되어 있는 세션 객체
@RequestParam String memberPw,//사용자가 입력한 비밀번호
RedirectAttributes attr//리다이렉트 시 정보를 추가하기 위한 객체
) {
String memberId = (String)session.getAttribute("memberId");
MemberDto memberDto = memberRepo.selectOne(memberId);
//비밀번호가 일치하지 않는다면 → 비밀번호 입력 페이지로 되돌린다
if(!memberDto.getMemberPw().equals(memberPw)) {
attr.addAttribute("mode", "error");
return "redirect:exit";
}
//비밀번호가 일치한다면 → 회원탈퇴 + 로그아웃
memberRepo.delete(memberId);
session.removeAttribute("memberId"); //session은 브라우저 전용 데이터저장박스
session.removeAttribute("memberLevel");
return "redirect:exitFinish";
}
@GetMapping("/exitFinish")
public String exitFinish() {
return "member/exitFinish";
}
'Project > 매치업(풋살 매칭 사이트)' 카테고리의 다른 글
암호화 (0) | 2023.07.17 |
---|---|
최종 코드 (0) | 2023.07.17 |
Final Project - 풋살 팀 매칭 사이트(Match-Up) (0) | 2023.07.01 |
+이메일 중복검사, 프로필 이미지 올리기 (0) | 2023.05.17 |
회원가입 페이지 구현 (0) | 2023.05.15 |