해결된 질문
작성
·
399
2
안녕하세요, 먼저 좋은 강의 만들어주셔서 감사드립니다.
해당 강의 '프로필 수정 처리' 학습을 진행하던 중 궁금한 사항이 생겨 질문드립니다.
먼저 강의 내용에서 처럼 POST 방식으로 프로필 수정 요청을 하는 경우
@PostMapping("{URL}") 어노테이션이 설정된 메소드가 실행이 되면서 DB의 정보와 Account 객체가 업데이트 되고, 여기서 Account 객체는 세션에 담긴 객체이지만 '준영속성(detached)' 상태로 AccountService.updateProfile(Account accoutn, Profile profile) 메소드를 통해 Merge를 하는 과정을 확인할 수 있었습니다.
다만, 여기서 궁금한 점은
1. 프로필이 수정되기 전 세션에 설정된 Account 객체는 로그인을 통해 SecurityContext에 저장된 User(Principal, 인증된 사용자 정보)와 동일하겠지만, 프로필 수정 후에는 세션의 Account 객체와 User는 서로 다른 상태가 되는게 맞을까요?
만약, 그렇다면 프로필 수정 후 User 정보도 Account 정보와 동일하게 맞추려면 어떤 방법이 있는지 궁금합니다.
2. [개인적인 질문] 만약, 관리자 페이지가 존재해서 사용자가 애플리케이션을 이용하고 있는 중에 관리자가 회원의 정보를 변경하는 경우 사용자는 자신의 정보가 변경이 되었는지 알 수 있는 방법이 있을까요?
- 사용자 측면에서 세션의 Account는 계속해서 관리자가 수정하기 전의 자신의 정보만을 바라보고 있을 것 같다라는 생각이 들어서 질문을 남겨봅니다.
글이 길어 졌네요. 답변 미리 감사드립니다.
답변 1
2
좋은 질문 감사합니다.
1. SecurityContext에 들어있는 Principal을 수정된 Account 객체로 바꿔주시면 됩니다.
SecurityContextHolder.getContext().setAuthentication(...);
2. 관리자가 사용자의 정보를 변경했을 때 세션에 들어있는 사용자의 정보까지 수정을 한다면 DB에 있는 정보를 바꿀테니 사용자가 사용하는 화면에서 사용자의 데이터를 DB에서 직접 읽어와 보여주는 화면들이라면, 그 화면들은 바뀐 정보를 보여줄 겁니다. 그러나, 말씀하신대로 세션에서 읽어서 보여주는 화면이라면 사용자가 바뀐 정보를 보지 못하겠죠. 다른 유저의 세션 정보까지 수정할 수 있는지는 모르겠으나.. 그런게 가능하다면 왠지 그 자체로 보안 이슈가 될 것 같네요.
답변 감사합니다. 추석 명절 무탈하게 보내세요.