포트폴리오/SPRINGBOOT 옛날

3-08 : entity에 author 추가하기

서버관리자 페페 2022. 10. 10. 18:57

단 하나의 맥락

: author를 추가하여 작성자 표시 준비

 


Semiflow Bundle

: Question Entity에 author 추가

: Answer Entity에 author 추가

: AnswerController에 Principal principal S 추가

: UserService에서 getUser 메소드 생성

: AnswerService에서 답변 생성 메서드에 author 추가

 


 

Question에 author 속성 추가하기 위해

 

> Question 에

 

@ManyToOne

private SiteUser author;

 

// import javax.persistence.ManyToOne;

// import com.mysite.sbb.user.SiteUser;

 

 

-

 

 

Answer에 author 속성 추가하기 위해

 

> Answer에

 

@ManyToOne

private SiteUser author

 

// import com.mysite.sbb.user.SiteUser;

 

 

-

 

 

답변에 작성자 저장하기 위해

 

> AnswerController에

 

  • @PostMapping("/create/{id}")
  • public String createAnswer
  • (Model model, @PathVariable("id") Integer id, @Valid AnswerForm answerForm, BindingResult bindingResult, Principal principal)

S 추가

 

// import java.security.Principal;

 

 

-

 

> UserService에

 

  • M : public SiteUser getUser(String username) {}
  • A1 : Optional<SiteUser> siteUser = this.userRepository.findByusername(username);
  • A2 :
    • if (siteUser.isPresent()) {  return siteUser.get(); }
    • else {  throw new DataNotFoundException("siteuser not found"); }

 

// import java.util.Optional;

// import com.mysite.sbb.DataNotFoundException;

 

 

-

 

 

> AnswerService에

 

  • M : public Answer create
  • S : (Question question, String content, SiteUser author) 추가
  • A : answer.setAuthor(author); 추가

 

 

-

 

> AnswerController에

 

// import com.mysite.sbb.user.SiteUser;

// import com.mysite.sbb.user.UserService;

 

  • P : private final UserService userService 추가
  • @PostMapping("/create/{id}")
  • M : public String createAnswer에
  • A : SiteUser siteUser = this.userService.getUser(principal.getName()); 추가 
  • A : this.answerService.create(question, answerForm.getContent(), siteUser) 추가

 

 

-

 

 

질문에 작성자 저장하기

 

> QuestionService에서

 

 

  • M : public void create
  • S : (String subject, String Content, SiteUser user) 추가
  • A : q.getAuthor(user); 추가

 

// import com.mysite.sbb.user.SiteUser;

 

 

-

 

> QuestionContorller에서

 

  • P : private final UserService userService; 추가
  • @PostMapping("/create")
  • M : public String questionCreate
  • S : (@Valid QuestionForm questionForm, BindingResult bindingResult, Principal principal) 추가
  • A : SiteUser siteUser = this.userService.getUser(principal.getName()); 추가

 

// import java.security.Principal;

// import com.mysite.sbb.user.SiteUser;

// import com.mysite.sbb.user.UserService;

 

 

-

 

로그아웃 상태에서 질문, 답변 등록을 막고, 로그인 유도하기

 

> QuestionController 에서

 

  • @GetMappng("/create")
  • public String questionCreate(QuestionForm questionForm)

 

  • @PostMapping("/create")
  • public String questionCreate(@Valid QuestionForm questionForm, BindingResult bindingResult, Principal principal)

 

> AnswerController 에서

 

  • @PostMapping("/create/{id}")
  • public String createAnswer(Model model, @PathVariable("id") Integer id, @Valid AnswerForm answerForm, BindingResult bindingResult, Principal principal)

 

메소드에

 

  • @PreAuthorize("isAuthenticated()")

를 추가한다

 

// import org.springframework.security.access.prepost.PreAuthorize;

 

 

-

 

또 @PreAuthorize 가 작동할 수 있도록

 

> SecurityConfig에서

 

  • @Configuration
  • @EnableWebSecurity
  • public class SecuirityConfig {}

 

에 @EnableGlobalMethodSecurity(prePostEnabled = true) 를 추가한다

 

// import org.sprinframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;

 

 

-

 

로그아웃 상태에서는 답변 작성을 막기 위해

 

>  question_detail.html 에서

 

답변 등록 파트에 위상을 추가한다

 

  • <textarea th:field="*{content}"  rows="10"  class="form-control"></textarea>

 

  • <textarea sec:authorize="isAnonymous()"  disabled  th:field="*{content}"  class="form-control"  rows="10"></textarea>
  • <textarea sec:authorize="isAuthenticated()"  th:field="*{content}"  class="form-control"  rows="10"></textarea>

로 변경

'포트폴리오 > SPRINGBOOT 옛날' 카테고리의 다른 글

3-10 수정과 삭제  (0) 2022.10.10
3 - 09 : 글쓴이 표시  (0) 2022.10.10
3-07 : 로그인과 로그아웃  (0) 2022.10.09
3-06 : 회원가입  (0) 2022.10.09
3-05 : spring security  (3) 2022.10.09