Notice
Recent Posts
Recent Comments
Link
개발 무지렁이
[Spring Boot] 프로필 이미지 업데이트와 캐시 본문
캐시를 거치면 프로필 이미지 갱신이 바로 되지 않는다
[MemberContext.java]
@Getter
public class MemberContext extends User implements OAuth2User {
private final Long id;
public MemberContext(Member member, List<GrantedAuthority> authorities) {
super(member.getUsername(), member.getPassword(), authorities);
this.id = member.getId();
}
public String getProfileImgRedirectUrl() {
return "/member/profile/img/" + getId() + "?random=" + UUID.randomUUID();
}
}
<img th:src="@{${#authentication.principal.profileImgRedirectUrl}}">
캐시를 거치지 않으면 똑같은 요청에 매번 통신을 해야한다.
(평소에는 캐시를 거치고)
[MemberContext.java]
@Getter
public class MemberContext extends User implements OAuth2User {
private final Long id;
@Setter
private LocalDateTime modifyDate;
public MemberContext(Member member, List<GrantedAuthority> authorities) {
super(member.getUsername(), member.getPassword(), authorities);
this.id = member.getId();
this.modifyDate = member.getModifyDate();
}
public String getProfileImgRedirectUrl() {
return "/member/profile/img/" + getId() + "?cacheKey=" + getModifyDate().toString();
}
}
[MemberController.java]
@Controller
@RequestMapping("/member")
@RequiredArgsConstructor
public class MemberController {
private final MemberService memberService;
@PreAuthorize("isAuthenticated()")
@PostMapping("/modify")
public String modify(@AuthenticationPrincipal MemberContext context, String email, MultipartFile profileImg, String profileImg__delete) {
Member member = memberService.getMemberById(context.getId());
if ( profileImg__delete != null && profileImg__delete.equals("Y") ) {
memberService.removeProfileImg(member);
}
memberService.modify(member, email, profileImg);
// 기존에 세션에 저장된 MemberContext 객체의 내용을 수정하는 코드 시작
context.setModifyDate(member.getModifyDate());
Authentication authentication = new UsernamePasswordAuthenticationToken(context, member.getPassword(), context.getAuthorities());
SecurityContextHolder.getContext().setAuthentication(authentication);
// 기존에 세션에 저장된 MemberContext 객체의 내용을 수정하는 코드 끝
return "redirect:/member/profile";
}
}
'Backend > 스프링부트' 카테고리의 다른 글
[Spring Boot] 업로드된 파일의 메타정보 (0) | 2022.12.27 |
---|---|
[Spring Boot] 때에 따라 업로드 개수가 다를 경우, MultipartRequest (0) | 2022.12.26 |
[Spring Boot] 업로드한 프로필 이미지 저장과 모듈화 (0) | 2022.12.25 |
[Spring Boot] 로깅 기능 라이브러리 Log4j와 properties 파일: 로그 설정정보 세팅 및 @Slf4j (0) | 2022.12.24 |
[Spring Boot] OAuth2와 카카오 로그인을 위한 의존성 추가 및 설정작업 (0) | 2022.12.21 |
Comments