SpringSecurity사용중 계정정보가 update되었을때 권한을 다시로드하는 방법.

로그인 중인 유저 정보 수정 시 Spring security Authentication/HttpSesession 값 반영

같은 팀 팀원 분인 소영님과 회원 관리를 할 때 회원의 권한 또는 역할을 갱신해주었을 때에 원래 권한이 계속 유지되어 권한 변경을 해주어도 db에 반영이 잘 되지만 로그아웃을 한 뒤 다시 로그인을 하지 않으면 로그인이 되있는 동안은 변경된 권한이 바뀌지 않는 문제에 대해서 같이 고민을 해보았다.

나 역시 이 부분이 내 기능 구현 담당이 아니였지만 스프링 시큐리티를 찍먹? 만 해보았기에 이 기회에 다시 한번 복기하고 넘어갈 수 있는 기회라 같이 고민해보기로 하였다!!

역시 혼자하는 고민보다 훨씬 좋은 것 같다ㅎㅎ..

@Transactional
@PostMapping(value = "/admin/member/update/{id}")
public String memberUpdate(@PathVariable("id") Long id, HttpServletRequest request, Model model) {
    Member member = memberService.getMemberById(id).get();
    String paramRole = request.getParameter("paramRole");
    try {
        Role role = (paramRole.equals("ADMIN"))? Role.ADMIN : (paramRole.equals("VENDOR"))? Role.VENDOR : Role.USER;
        member.updateRole(role);
    } catch (IllegalStateException e){
        model.addAttribute("errorMessage", e.getMessage());
        return "redirect:/";
    }

    return "redirect:/";
}

기존 멤버 역할을 갱신하는 컨트롤러 사이드의 메서드이다.

세션을 로그아웃 없이 세션을 갱신해주는 방식에 대해서 찾아 보던 중 참고한 좋은 블로그 두 개가 있어서 가져왔다.

로그인한 유저의 정보를 클라이언트 사이드에서 컨트롤러 단으로 넘겨주었을 때 이 수정된 세션의 정보를 spring security 에서 인증해준 뒤 변경 감지에 대해 갱신한 값을 다시 httpsesstion 에 반영 시키는 것이다.