일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- spring-boot
- baekjoon1541
- 알고리즘데이
- 2021.01.22
- 2021.01.18
- 2021.01.06
- algorithm
- 쉽게 배우는 운영체제
- 박재성
- 2021.01.21
- 2021.01.11
- 2021.01.17
- 마스터즈 2주차 회고
- 백준 1149
- 잃어버린 괄호
- Til
- 코드스쿼드 마스터즈
- 백준
- 2021.01.12
- 2021.01.14
- 백준 9093
- 자바
- 2021.01.19
- SWEA
- java
- 2021.01.13
- 코드스쿼드
- 괄호
- 2020.01.08
- 알고리즘
- Today
- Total
Cooper's devlog
4-3. 자기 자신에 한해 개인정보 수정 본문
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 발생
- 로그인 후, 개인정보수정 클릭 시, 수정 페이지 반환.
'Programming > Spring-boot' 카테고리의 다른 글
4-5. 질문하기, 질문 목록 기능 구현 (0) | 2020.07.20 |
---|---|
4-4. 중복 제거, clean code, 쿼리 보기 설정 (0) | 2020.07.20 |
4-2. 로그인 상태에 따른 메뉴 처리 및 로그아웃 (0) | 2020.07.20 |
4-1. 로그인 기능 구현 (0) | 2020.07.17 |
4-0. 네 번째 반복주기 학습 목표 및 과정 설명 (0) | 2020.07.17 |