삭제하려했을때 별다른 인증과정없이 누구나 삭제할수 있겠다는 생각이 들었다.
무슨뜻이냐면 삭제버튼은 작성자만 보이게했지만 만약
어떤 이가 삭제 요청 url(예 userboard/deleteboard/{id})을 알게된다면
버튼없이, 해당 사용자나 그 글의 작성자가 아니더라도
delete 요청을 통해 삭제가 가능하다는 문제점을 알게됐다.
위의 사진은 컨트롤 단이다.
사진과 같이 별다른 인증과정 없이
요청 url만 받으면 바로 삭제하고 OK결과를 출력한다.
(거기다 삭제 실패시 반환값은 눈을씻고 찾아볼수가 없다 ㅠ)
그래서 로그인완료후 게시판 작성자가아닌 사용자가 delete 요청을해서 삭제하는 일이 없도록
중간에 @AuthenticationPrincipal 어노테이션을 사용해서
PrincipalDetail의 값을 가져와 현재 인증된(로그인된) 계정 아이디를 가져옵니다
삭제하려는 게시판의 작성자 이름과 로그인된 계정 이름 비교
일치-> 삭제, 불일치 -> -1값 반환
그럼 여기서 @AuthenticationPrincipal 어노테이션을 조금만 알아보자
문서(https://docs.spring.io/spring-security/site/docs/5.2.1.RELEASE/reference/htmlsingle/#oauth2login)에 따르면
3.2 버전부터는 어노테이션을 이용해서 간단하게 사용할수 있다고 나와있었습니다.
3.2 전버전 사용자라면 위 사진의 방법을 시도해 보시면 될것 같습니다.
PrincipalDetail은 다른게 아니라 UserDetails(사용자 정보를 담는 인터페이스)를 상속받은
클래스로 자바 Security가 받아낸 인증정보, 유저 정보를 받아 저장하는 클래스입니다.
자바 security에 관한 자세한 공부내용은 다음에 하겠습니다
출처 :
https://docs.spring.io/spring-security/site/docs/5.2.1.RELEASE/reference/htmlsingle/#oauth2login