로그아웃 기능을 구현하였다.
MemberController
@Controller
@RequestMapping("/member")
@RequiredArgsConstructor
public class MemberController {
private final MemberService memberService;
private final LoginService loginService;
@GetMapping("/logout")
public String logout(HttpServletRequest request) {
HttpSession session = request.getSession(false);
if(session != null) {
session.invalidate(); //해당 세션 무효화
}
return "redirect:/";
}
...
- getSession(false): HttpSession이 존재하면 현재 HttpSession을 반환하고 존재하지 않으면 새로 생성하지 않고 그냥 null을 반환한다.
- getSession(true): HttpSession이 존재하면 현재 HttpSession을 반환하고 존재하지 않으면 새로 세션을 생성한다.
이전에 회원가입 시 바로 회원정보를 수정할 수 있게 뷰를 만들어놓았다. 수정 기능을 구현해보자.
MemberController
@Controller
@RequestMapping("/member")
@RequiredArgsConstructor
@Slf4j
public class MemberController {
private final MemberService memberService;
private final LoginService loginService;
@GetMapping("/edit/{memberId}")
public String editForm(Model model, @PathVariable Long memberId) {
Member findMember = memberService.findOne(memberId);
model.addAttribute("memberDto",new MemberDto(findMember));
return "member/editMemberForm";
}
@PostMapping("/edit")
public String edit(@ModelAttribute MemberDto memberDto, RedirectAttributes redirectAttributes) {
log.info(memberDto.toString());
Member member = memberDto.toEntity();
member.setId(memberDto.getId());
memberService.updateMember(member);
redirectAttributes.addAttribute("memberId",memberDto.getId());
return "redirect:/member/saved/{memberId}";
}
...
editMemberForm.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>savedMemberForm</title>
<!-- Bootstrap core CSS -->
<link href="/static/css/bootstrap.min.css"
th:href="@{/css/bootstrap.min.css}"rel="stylesheet">
<link href="/static/css/signin.css"
th:href="@{/css/signin.css}"rel="stylesheet">
<link href="/static/css/headers.css"
th:href="@{/css/headers.css}" rel="stylesheet">
<style>
.bd-placeholder-img {
font-size: 1.125rem;
text-anchor: middle;
-webkit-user-select: none;
-moz-user-select: none;
user-select: none;
}
@media (min-width: 768px) {
.bd-placeholder-img-lg {
font-size: 3.5rem;
}
}
</style>
</head>
<body>
<div class="container">
<form action="/member/edit" method="post">
<div class="py-5 text-center">
<h2>회원정보 수정</h2>
</div>
<div>
<label for="id">식별 ID</label>
<input type="text" id="id" name="id" class="form-control" value="1" th:value="${memberDto.id}" readonly>
</div>
<div>
<label for="loginId">회원 아이디</label>
<input type="text" id="loginId" name="loginId" class="form-control" value="testId" th:value="${memberDto.loginId}" >
</div>
<div>
<label for="password">비밀번호</label>
<input type="text" id="password" name="password" class="form-control" value="testPw" th:value="${memberDto.password}" >
</div>
<div>
<label for="email">이메일</label>
<input type="text" id="email" name="email" class="form-control" value="test@naver.com" th:value="${memberDto.email}" >
</div>
<hr class="my-4">
<div class="row">
<div class="col">
<button class="w-100 btn btn-primary btn-lg"
type="submit">수정하기</button>
</div>
<div class="col">
<button class="w-100 btn btn-secondary btn-lg"
th:onclick="|location.href='@{/member/saved/{memberId}(memberId=${memberDto.id})}'|"
type="button">뒤로가기</button>
</div>
</div>
</form>
</div>
</body>
</html>
savedMemberForm.html
<div class="col">
<button class="w-100 btn btn-primary btn-lg"
th:onclick="|location.href='@{/member/edit/{memberId}(memberId=${memberDto.id})}'|"
type="button">회원 정보 수정</button>
</div>
- 경로만 수정
WebConfig
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginCheckInterceptor())
.order(1)
.addPathPatterns("/**")
.excludePathPatterns("/*","/member/login","/member/create","/member/saved/*","/css/**","/js/**",
"/member/edit/**");
}
}
- "/member/edit/**" 경로도 검증 제외 할 패턴에 추가
'토이 프로젝트 > 게시판 프로젝트' 카테고리의 다른 글
10. 게시판 프로젝트 - 글 조회, 조회수, 글 수정, welcomePage (0) | 2022.08.12 |
---|---|
9. 게시판 프로젝트 - 게시판 뼈대, 글 등록 구현 (0) | 2022.08.11 |
7. 게시판 프로젝트 - BaseTimeEntity, MemberDto (0) | 2022.08.11 |
6. 게시판 프로젝트 - 인터셉터 등록, 회원가입 폼 중복 ID 검증 (0) | 2022.08.10 |
5. 게시판 만들기 - 회원가입 필드 오류 검증, PRG 패턴 (0) | 2022.08.09 |