🫠스프링 시큐리티를 사용하다 보면 유저의 정보가 바뀌는 경우가 있습니다.
이 경우SecurityContextHolder
에 들어 있는 정보를 바꾸지 않을 경우 정보의 불일치가 일어나기 때문에 바꿔주어야 합니다. 방법은 아래와 같습니다.
UserDetails newPrincipal = userDetailsService.loadUserByUsername(dto.getUsername());
UsernamePasswordAuthenticationToken token =
new UsernamePasswordAuthenticationToken(newPrincipal, newPrincipal.getPassword(), newPrincipal.getAuthorities());
token.setDetails(SecurityContextHolder.getContext().getAuthentication().getDetails());
SecurityContextHolder.getContext().setAuthentication(token);
🫡새로운
Authentication
을 만들어서SecurityContextHolder.getContext().setAuthentication(token);
을 통해 새로운 값을 넣어주면 변경이 됩니다.
🥳
userDetailsService.loadUserByUsername
의 바뀐 정보를 토대로 다시 검증 과정을 거치는 단계입니다.
해주는 것이 좋습니다.