티스토리 뷰

728x90
반응형

1. 인증 기능 구현 2

(1) ArticlesService 수정

  • Delete
    • 게시글을 삭제할 때(deleteArticle 메서드), 작성한 사용자가 아니라면 삭제할 수 없도록 수정한다.
    • articleId 외에 userId를 받아 articleRepository.deleteByIdAndUserAccount_UserId() 메서드를 통해 삭제하게 한다.
    • 해당 메서드는 ArticleRepository에 생성하면 된다.
  • Update
    • 글을 작성한 사용자의 정보와 수정하려는 인증된 사용자 userAccount 사용자의 정보가 동일한지 비교하고, 같을 때 업데이트를 수행하도록 한다.

 

(2) ArticleController 수정

  • Delete
    • deleteArticle 메서드에서 userId 정보를 추가해준다.
    • 하지만 여기서는 실제 인증 정보와 관련하여 userId를 가져와야 하기 때문에 어노테이션을 쓰면 간단히 정보를 불러올 수 있다.
    • 이때 쓰이는 어노테이션은 @AuthenticationPrincipal 이다.
    • @AuthenticationPrincipal 어노테이션이 쓰인 boardPrincipal로부터 인증 정보를 불러올 수 있게 된다.
  • Update
    • delete 메서드 때와 마찬가지로 @AuthenticationPrincipal 을 사용하여 인증 정보를 불러온다.
    • 이를 통해 임의로 작성하여 입력해주던 사용자 정보를 boardPrincipal로 바꿀 수 있다.
    • 인증 정보는 dto에 댐아 전달해주면 된다.
  • PostNewArticle
    • 해당 메서드도 마찬가지의 방법으로 사용자 인증 정보를 받아올 수 있다.

 

(3) 댓글 Service, Repository, Controller 수정

게시글에서 수정한 과정과 유사하게 ArticleComment에 대하여 인증 정보를 확인하여 저장, 수정, 삭제가 이루어질 수 있도록 한다.

  • ArticleCommentRepository
    • deleteByIdAndUserAccount_UserId 메서드를 추가한다.
  • ArticleCommentService
    • deleteArticleComment 메서드에서 userId를 활용해 deleteByIdAndUserAccount_UserId가 수행되도록 한다.
  • ArticleCommentController
    • @AuthenticationPrincipal BoardPrincipal 을 사용하여 username을 불러와 deleteArticleComment 메서드를 실행한다.
    • 마찬가지로 postNewArticleComment 메서드가 실행될 때, 인증된 사용자 정보를 boardPrincipal 에서 불러온다.

 

(4) 뷰 구현

  • 헤더에 로그인 로그아웃 버튼을 생성한다.
  • xml 파일에서 sec 태그를 사용하여 보안을 설정해준다.
  • 로그인 인증되었을 때만 사용자 이름이 나타날 수 있도록 한다.
  • (참고, 비밀번호에는 PasswordEncoderFactories 의 메서드를 사용하였는데 이 기능 때문에 repository에 저장되는 비밀번호 앞에 특정 앞머리를 추가해 주어야 한다. {noop})
  • 추가적으로 로그인이 안되었다면 글쓰기 버튼이 보이지 않고, 본인이 아니라면 추가 삭제 버튼도 보이지 않도록 설정한다.
  • xml 파일에서 인증되었을 때만 버튼이 보이게 sec:authorize = “isAuthenticated()” 태그를 추가해주면 된다.
  • 게시글 수정 삭제와 댓글 삭제할 때에는 권한 여부 뿐만 아니라 사용자 본인이 맞는지도 확인해야 한다.
th:if=”${#authorization.expression(‘isAuthenticated()’)} and *{userId} == ${#authentication.name}”
  • ArticleWithCommentsResponse와 ArticleCommentResponse에 userId 정보가 없었음으로 추가해 준다.

 

 


 

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

https://bit.ly/43z0P6S

 

 

#패스트캠퍼스 #포트폴리오 #직장인자기계발 #환급챌린지 #포트폴리오챌린지 #패스트캠퍼스후기 #초격차패키지 #오공완

728x90
반응형
댓글