원래 세션은 Authehtication 객체에 최종적으로 저장된다.
만약 내가 username을 찾고싶다면
원래는 HttpSession 선언하고 SecurityContextHolder 안에 Authentication 객체에서 username을 찾아와야 하는데 이건 너무 복잡한 과정이다. ( 밑에 어노테이션 미사용코드 참고)
그래서 탄생한 어노테이션이
@AuthenticationPrincipal
이다.
이걸로 Authentication 객체에 바로 접근 가능한데
@GetMapping("/user/{id}/update")
public String update(@PathVariable int id, @AuthenticationPrincipal PrincipalDetails principalDetails){
//어노테이션
System.out.println("세션 정보 : " + principalDetails.getUser());
//어노테이션 미사용시
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
PrincipalDetails mPrin = (PrincipalDetails) auth.getPrincipal();
System.out.println(mPrin.getUser());
return "user/update";
}
}
어노테이션 사용 코드와 어노테이션 미사용시 코드이다 (아래 코드는 그냥 참고만하세요)
사용하지않은 코드의 코드량 차이가 제법 유의미 하게 난다.
위 코드처럼 sysout을 찍으면

이런식으로 DB에 저장된 데이터의 세션이 주르륵 나온다
그렇다면 이제
@GetMapping("user/{id}/update")
public String update(@PathVariable int id , @AuthenticationPrincipal PrincipalDetails principalDetails, Model model){
model.addAttribute("principal", principalDetails.getUser());
return "user/update";
}
이렇게 모델에 담아서
jsp 에서
<div class="content-item__02">
<div class="item__title">이름</div>
<div class="item__input">
<input type="text" name="name" placeholder="이름"
value="${principal.name}" />
</div>
</div>
이런식으로 EL태그로 활용 가능하다.
'Spring > JPA + Security' 카테고리의 다른 글
[Spring] 회원 수정 에서 유효성 처리 하기 -2 DB에 없는 값 (0) | 2023.01.08 |
---|---|
[Spring] 회원 수정 에서 유효성 처리하기 - 2 Exception Handler 적용 (0) | 2023.01.07 |
[Spring Data JPA] 데이터 수정하기 + AJAX 포함 예제 (0) | 2023.01.07 |
[Spring Security] 세션을 JSP로 넘기는 방법 2가지 (0) | 2023.01.07 |
스프링 시큐리티에서의 로그인 - 시큐리티한테 위임 (0) | 2023.01.07 |
댓글