팬레터 게시물에 들어가면
글쓴이 본인일 경우 수정 / 삭제 버튼이 보이게 하기 위해
model 에 닉네임 값을 넣어 보내서
닉네임 값이 왔을 경우 수정/삭제 버튼을 보여주도록 했다
그런데,
닉네임은 변경 가능한 값이기 때문에
닉네임으로 검증할 경우
추후 다른 사람이 자기 게시물이 아닌데도 수정/삭제 버튼이 보이는 경우가 발생할 수 있다
그래서 닉네임 값이 아닌, id 값으로 본인 게시글 검증을 하도록 코드를 변경해보았다!
원래코드
@GetMapping("/{num}")
public String fanLetter(@PathVariable Long num, Model model, HttpServletRequest request) {
// 글
Map<String, Object> map = fanLetterService.readLetter(num);
FanBoard fanBoard = (FanBoard) map.get("fanLetter");
List<FileInfo> fileInfoList = (List<FileInfo>) map.get("fileInfoList");
List<String> filePaths = webService.getFilePaths(fileInfoList);
// 댓글
List<Comment> commentList = fanLetterCommentService.readComment(num);
List<CommentDto> comments = new ArrayList<>();
for (Comment comment : commentList) {
CommentDto commentDto = new CommentDto(comment);
if (comment.getCommentRemover() != null) {
commentDto.itRemoved();
}
comments.add(commentDto);
}
// 이전글 다음글
Map<String, FanBoard> prevNextLetter = fanLetterService.prevNextLetter(num);
FanBoard prevLetter = prevNextLetter.get("prev");
FanBoard nextLetter = prevNextLetter.get("next");
if (prevLetter != null) {
model.addAttribute("prev", new PrevNextDto(prevLetter.getId(), prevLetter.getTitle()));
}
if (nextLetter != null) {
model.addAttribute("next", new PrevNextDto(nextLetter.getId(), nextLetter.getTitle()));
}
model.addAttribute("fanLetter", new FanLetterViewDto(fanBoard, comments.size()*1L));
model.addAttribute("filePath", filePaths);
model.addAttribute("comments", comments);
// 본인 글인지 확인
try {
String nickname = webService.getNicknameInSession(request);
if (nickname.equals(fanBoard.getMember().getNickname())) {
model.addAttribute("nickname", nickname);
}
} catch (MemberNotFoundException e) {
System.out.println("로그인이 안 되어 있음");
}
return "/fanLetter/viewPage";
}
이렇게 세션에 있는 닉네임 값을 가져와서 검증하는 것을 볼 수 있다
변경은 간단하다
// 본인 글인지 확인
try {
Long memberId = webService.getIdInSession(request);
if (memberId.equals(fanBoard.getMember().getId())) {
model.addAttribute("writer", memberId);
}
} catch (MemberNotFoundException e) {
log.info("로그인이 안 되어있음");
}
이렇게 memberId 를 검증만 해주면 된다
model 에 넣은 값은 nickname이 아니니 writer 로 변경해준다
webService.getIdInSession() 은 MemberNotFoundException 이 발생할 수 있는데
로그인 사용자가 아니어도 글을 볼 수는 있기 때문에
예외가 발생해도 별다른 조치 없이 그냥 스무스하게 넘어가면 된다~
프론트에서도
이렇게 리팩토링하니 닉네임을 사용할 때보다 보안에 더 유리하게 되었다 ^___^/
뿌듯!
728x90
'프로젝트 > 토이 프로젝트) 오늘도 휴일' 카테고리의 다른 글
Service 를 테스트해서 오류를 잡아내다! (0) | 2023.07.01 |
---|---|
NullCheck 를 @Valid 로 손쉽게 ^__^ (0) | 2023.06.22 |
Spring Security ) Spring 3.0 에 맞춰 SecurityConfig 를 수정하자! (1) | 2023.06.14 |
좀 더 객체 지향에 걸맞게 메일 서비스를 수정해보자 ! (1) | 2023.06.13 |
토이 프로젝트 ) 휴일 팬사이트 "오늘도 휴일" : 사이트 소개 및 설명 (0) | 2023.05.26 |