인프런 커뮤니티 질문&답변

Henu님의 프로필 이미지
Henu

작성한 질문수

스프링과 JPA 기반 웹 애플리케이션 개발

프로필 수정 처리

프로필 수정 처리와 그 외 개인적인 질문드립니다.

해결된 질문

작성

·

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에서 직접 읽어와 보여주는 화면들이라면, 그 화면들은 바뀐 정보를 보여줄 겁니다. 그러나, 말씀하신대로 세션에서 읽어서 보여주는 화면이라면 사용자가 바뀐 정보를 보지 못하겠죠.  다른 유저의 세션 정보까지 수정할 수 있는지는 모르겠으나.. 그런게 가능하다면 왠지 그 자체로 보안 이슈가 될 것 같네요.

Henu님의 프로필 이미지
Henu
질문자

답변 감사합니다. 추석 명절 무탈하게 보내세요.

Henu님의 프로필 이미지
Henu

작성한 질문수

질문하기