Spring/Spirng_CRUD(MVC_Patterns)

Basic_MVC5

whyWhale 2020. 12. 1.

environment-> intelij(Ultimate)+springInitialize+templateEngine(Mustache)
fronted : bootstrap

 

GIT-HUB      github.com/KBY-TECH/SpringBasic_MVC2
#SpringBasic_MVC3

 

 

기능 구현 :

{

 리펙토링(중복 코드 제거.)(로그인 세션,해당 계정이 게시글 작성자와 일치 여부 확인)

}

--> 수정화면으로 넘어가기 위한 controller 

이전 코드

 

if(!HttpSessionUtils.isLoginUser(session)) //tempUser==null
{
System.out.println("로그인이 안되어 있습니다.");
return "redirect:/user/signIn";
}
User sessionndUser=HttpSessionUtils.getUserFromSession(session);
//나의 글인지 아닌지. check
Board myboard=boardRepository.findById(id).get();

 

if(!myboard.isSameWriter(sessionndUser))
{
return "redirect:/";
}

model.addAttribute("board",myboard);

 

 

코드 중복을 위한 함수 boardControllor 메소드 생성.

 

로그인된  User인지 그리고 board 작성자와 동일 사용자인지 확인.

try {
Board board=boardRepository.findById(id).get();
hasPermission(session,board);  // -> 1. 로그인한 사용자인가?  2. 게시글 작성자와 동일한 사용자인가? 이 2개를 모두                                           // 통과해야 밑으로 코드를 진행 할 수 있다.
model.addAttribute("board",board);
return "board/board_updateForm";
}
catch (IllegalStateException e)
{
model.addAttribute("errorMsg",e.getMessage());
return "index";
}

 

 

--> 삭제기능의 controller 

 

수정 전 삭제 기능

 

User sessionndUser=HttpSessionUtils.getUserFromSession(session);
//나의 글인지 아닌지. check
Board myboard=boardRepository.findById(id).get();
// 현재 작성자와 글쓰기가 일치하는 여부확인 , 그런데

if(!myboard.isSameWriter(sessionndUser))  //이전 시간에 board라는 클래스에서 생성한 메소드 isSameWriter
{
return "redirect:/";
}

boardRepository.delete(boardRepository.findById(id).get());
return "redirect:/";*/

 

수정 후 삭제 기능

 

try {
Board board=boardRepository.findById(id).get();
hasPermission(session,board); // -> 1. 로그인한 사용자인가?  2. 게시글 작성자와 동일한 사용자인가? 이 2개를 모두                                           // 통과해야 밑으로 코드를 진행 할 수 있다.
boardRepository.delete(board);
return "redirect:/";
}
catch (IllegalStateException e)
{
System.out.println("illigal Access");
model.addAttribute("errorMsg",e.getMessage());
return "/user/signIn";
}

 

하지만 이 컨트롤러 안에서 구현한 isPermission 또한 이 안에 있기 때문에 다른 곳으로 아예 분리하는 것이 더 편할 것 같다.

 

domain package 에 Result 라는 클래스를 만든후 해당 결과가 참인지 거짓인지 하는 필드와 해당 관련 오류에 대한 메시지를 가지고 있는 것을 만들었다.

 

 

잘 정리된 클래스를 따로 생성.
boardController 안에 생성 ..

Result 클래스에서는 해당 코드가 로그인한 유저 그리고 홰당 게시물 작성자와 사용자가 일치하는지 통과를 하면 새로운 Result 인스턴스를 만들고 해당 result안에이는 valid 한지 안하는지에 따라 errormsg또한 가지고 있다.

해당 코드가 로그인한 유저 그리고 홰당 게시물 작성자와 사용자가 일치하지 않아도 새로운 인스턴스가 생성되며 valid는 false로 msg 메시지는 valid 메소드안에 정의해 놓은 대로 메시지를 갖게 될것이다.

try catch 문 보다는 이러한 형태의 클래스를 생성후 관리하는 것이 좀더 잘 팩토링된 모습인 것 같다.

 

 

수정화면 최종코드

 

삭제기능 최종코드

 

 

hasPermisson 으로 controller안에 있는 중복된 코드를 리팩토링 하였지만 코드가 장황해짐을 느꼇었다. 하지만 class안에 담아 해당 로그인한 사용자 , 작성자와사용자 일치여부를 확인하는 것이 valid한지 안하는지에 따라 체크하는 것이 가독성도 좋았으며 매우 잘 정돈된 리팩토링이 될 수 있었다.

 

'Spring > Spirng_CRUD(MVC_Patterns)' 카테고리의 다른 글

Basic_MVC6(Ajax)  (0) 2020.12.09
Basic_MVC4  (0) 2020.11.30
Basic_MVC3  (0) 2020.11.26
Basic_MVC2  (0) 2020.11.19
Basic_MVC  (0) 2020.11.12

댓글