코딍코딍
코딩기록
코딍코딍
전체 방문자
오늘
어제
  • 분류 전체보기 (271)
    • 개발 (2)
    • Java (1)
    • 스프링 (28)
    • JPA (11)
    • Git (3)
    • 알고리즘 (160)
      • 백준 (132)
      • 프로그래머스 (8)
      • SWEA (20)
    • 토이 프로젝트 (14)
      • 간단한 Springboot CRUD (1)
      • 게시판 프로젝트 (13)
    • 알고리즘 개념정리 (8)
    • 오류 해결 (13)
    • 보류 (0)
    • AWS (5)
    • 트러블 슈팅 (0)
    • 회고 (3)
    • CS (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

최근 글

티스토리

hELLO · Designed By 정상우.
코딍코딍

코딩기록

토이 프로젝트/게시판 프로젝트

8. 게시판 프로젝트 - 로그아웃, 회원 정보 수정

2022. 8. 11. 16:21

로그아웃 기능을 구현하였다.

 

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/**" 경로도 검증 제외 할 패턴에 추가

 

 

editMemberForm.html

'토이 프로젝트 > 게시판 프로젝트' 카테고리의 다른 글

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
    '토이 프로젝트/게시판 프로젝트' 카테고리의 다른 글
    • 10. 게시판 프로젝트 - 글 조회, 조회수, 글 수정, welcomePage
    • 9. 게시판 프로젝트 - 게시판 뼈대, 글 등록 구현
    • 7. 게시판 프로젝트 - BaseTimeEntity, MemberDto
    • 6. 게시판 프로젝트 - 인터셉터 등록, 회원가입 폼 중복 ID 검증
    코딍코딍
    코딍코딍
    ㅎ2

    티스토리툴바