• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

spring sercurity를 통해서 특정 행위 허용

22.02.09 13:34 작성 조회수 254

0

안녕하세요. 강사님 좋은 강의해주셔서 감사합니다.

제가 시큐리티에 jwt를 사용해서 rest api 를 개발중인데요.제가 강의를 아직 덜 보았지만 DB를 통해서 권한 관리하는 방법을 사용중입니다..아래 처럼 사용중입니다.

개발중 문제가 하나 있는데 게시판 같은 글을 삭제 할때 보통 해당 url과 method까지 추가해서 권한을 부여 하고있거든요.

예를 들어 /api/posts/*, DELETE를 추가하고 권한은 ROLE_ADMIN, 과 ROLE_USER를 설정 했습니다.

그럼 해당 url의 method는 권한을 체크하여 허용하거나 불허 합니다.

다만  이 글이 작성자 혹은 관리자만 삭제 할수 있어야 하는데 매번 컨트롤러에서 유저 체크하고 권한 체크하는 코드를

넣어줘야 하는가 궁금증이 생겨 찾아보니 인터셉터에서 url과 method 를 체크하는 벙법이 있었고 아래 처럼 다른 분의 질문에

이런식으로 예시를 들어주셨더라구요. 그런데 아래 메소드의 파라미터의 user는 로그인한 user객체일텐데 제가 지우거나 수정

해야 할 글의 생정자id는 어떻게 가져와 비교를 하시는건가요?

@PeAuthorize에 있는걸로는 잘 이해가 안되더라구요.

rest api로 개발 하다보니 url은 /api/posts/1 과 같이 게시글 id만 보내는 상황입니다.,

답변 부탁드리겠습니다. 감사합니다.

// 로그인한 사용자이고 본인인 경우나 혹은 전체 관리자인 경우 수정 메서드가 실행되고 그렇지 않을 경우엔
// 403 에러 발생함
@PreAuthorize
("isAuthenticated() and (( #user.name == principal.name ) or hasRole('ROLE_ADMIN'))")
@RequestMapping( value = "", method = RequestMethod.PUT)
public ResponseEntity<Message> updateUser(User user ){
messageService.updateMessage( "메시지 저장");
return new ResponseEntity<Message>( new Message("수정성공"), HttpStatus.OK );
}

답변 1

답변을 작성해보세요.

0

요청을 보낼 때 json 형태의 user 정보를 보내야 될 것 같습니다

물론 user 정보는 요청 전에 객체 혹은 토큰 형태로 이미 받은 상태여야 할거구요

 

흐름상 인증을 받은 상태이기 때문에 user 정보는 얻으실 수 있을 것이고 요청시마다 파라미터로 전달하시면 될 것 같은데요..

 

다른 문제되는 부분이 있는건가요?

 

 

네 인증을 받은 상태라서 로그인 유저 정보를 가져오는데는 어려움이 없습니다. 그럼 작성한 게시글의 작성자 id는 어떻게 가져오는가가 문제입니다. 구글링을 해보니 바디에 삭제 혹은 수정할 글의 정보를 담아서 요청을 보내더라구요..그럼 의미가 없는게 아닌가 싶습니다. 해당 글쓴이의  id(pk)를 제 id와 같게 담아서 보내면 삭제할수 있는 권한만 있으면 다른 글도 삭제 혹은 수정이 되지 않는가? 라는 생각이 들더라구요..