Cooper's devlog

4-3. 자기 자신에 한해 개인정보 수정 본문

Programming/Spring-boot

4-3. 자기 자신에 한해 개인정보 수정

cooper_dev 2020. 7. 20. 03:18

4-3. 자기 자신에 한해 개인정보 수정

1. 강의 링크

https://www.youtube.com/watch?v=HfW5kvsaAEA&list=PLqaSEyuwXkSppQAjwjXZgKkjWbFoUdNXC&index=26

 


2. 학습 목표

  • 로그인한 사용자의 경우에 한해 자기 자신의 정보만 수정 가능하도록 구현
    • 기존 : http://localhost:8787/users/1/form 접속 시, id 1번의 수정페이지 접근 가능.
    • 수정 : 내 정보만 수정 가능하도록 구현

3. 과정

1. 자신의 정보만 수정 가능하도록 구현

  • navigationbar에서 '개인정보수정' 내용 수정
  • update 메소드 및 updateForm 내용 수정(userController)

 


 

(1) navigationbar에서 '개인정보수정' 내용 수정

 

[1] navigation.html > a > href 내용 수정

 
<li><a href="/users/{{id}}/form" role="button">개인정보수정</a></li>
 

 

[2] '개인 정보 수정' 클릭 → 500 error 발생 시

- 원인 : login 메소드 사용 객체 이름(user) == updateForm 메소드 사용 객체 이름(user)

- 해결책: 두 메소드 중, 하나를 객체 이름으로 변경 필요 login 메소드 객체명(sessionedUser)


 

(2) update 메소드 및 updateForm 내용 수정 (userController)

 

방법1. 조건문을 통한 예외처리

  • 1번 조건문 : session 객체 유무에 따른 예외처리
  • 2번 조건문 : session 객체 식별 예외처리(session Id와 작성자 id로 식별)
    • @PathVariable Long id : url parameter를 통해 확인
    • session.getAttribute : session 객체를 받아오겠다.(Object return)

- updateForm(userController)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    @GetMapping("{id}/form"//수정하고자 하는 정보를 호출하는 메소드
    public String updateform(@PathVariable Long id, Model model, HttpSession session) {
        Object tempUser = session.getAttribute("sessionedUser");
        if(tempUser == null) {
            return "redirect:/users/loginForm";
        }
        
        User sessionedUser = (User)tempUser;
        if(!id.equals(sessionedUser.getId())) {
            throw new IllegalStateException("자신의 정보만 수정할 수 있습니다.");
        }
        
        User user = userRepository.findById(id).get();
        model.addAttribute("user", user);
        return "user/updateform";
    }
 

- update(userController)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    @PutMapping("/{id}"//수정하고자  하는 id 정보를 호출하는 메소드
    public String update(@PathVariable Long id, User updatedUser, HttpSession session) {
        Object tempUser = session.getAttribute("sessionedUser");
        if(tempUser == null) {
            return "redirect:/users/loginForm";
        }
        
        User sessionedUser = (User)tempUser;
        if(!id.equals(sessionedUser.getId())) {
            throw new IllegalStateException("자신의 정보만 수정할 수 있습니다.");
        }
        
        User user = userRepository.findById(id).get();
        user.update(updatedUser); //user class에서 수정하고 싶은 정보를 수정하는 메소드 
        userRepository.save(user);
        return "redirect:/users";
    }
cs

 

방법2. repository 객체 변수 수정

  • 10번 : userRepository.findById(id).get() → userRepository.findById(sessionedUser.getId()).get()

- updateForm(userController)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    @PutMapping("/{id}"//수정하고자  하는 id 정보를 호출하는 메소드
    public String update(@PathVariable Long id, User updatedUser, HttpSession session) {
        Object tempUser = session.getAttribute("sessionedUser");
        if(tempUser == null) {
            return "redirect:/users/loginForm";
        }
        
        User sessionedUser = (User)tempUser;
        
        User user = userRepository.findById(sessionedUser.getId()).get();
        user.update(updatedUser); //user class에서 수정하고 싶은 정보를 수정하는 메소드 
        userRepository.save(user);
        return "redirect:/users";
    }
cs

- update(userController)

1
2
3
4
5
6
7
8
9
10
11
12
13
    @GetMapping("{id}/form"//수정하고자 하는 정보를 호출하는 메소드
    public String updateform(@PathVariable Long id, Model model, HttpSession session) {
        Object tempUser = session.getAttribute("sessionedUser");
        if(tempUser == null) {
            return "redirect:/users/loginForm";
        }
        
        User sessionedUser = (User)tempUser;
        
        User user = userRepository.findById(sessionedUser.getId()).get();
        model.addAttribute("user", user);
        return "user/updateform";
    }
cs

 


(3) 구현 확인

-url(/users)로 접속 시,

 

1. 1번 아이디(javajigi)로 접속 - 다른 아이디 클릭 시

다른 사람 클릭시

2. 500 error 발생

다른 아이디로 접근 시

 

- 로그인 후, 개인정보수정 클릭 시, 수정 페이지 반환.


 

Comments