지난 포스팅에서 @AuthenticationPrincipal
애노테이션을 사용해 Controller 단에서 인증된 유저의 정보를 받아오는 기능을 구현했다.
이번엔 회원이 아닌 사용자의 요청도 함께 받으려 한다.
- 모든 사용자에게로부터 요청을 받고, 조건에 따라 로직을 분리.
- 회원 요청인 경우 : AccessToken과 함께 요청이 왔다면 인증을 진행한 후 로직 진행
- 비회원 요청인 경우 : AccessToken 없이 요청이 왔다면 인증을 패스하고 바로 로직 진행
@AuthenticationPrincipal
은 SpEL
을 지원한다. (Principal
의 내부 정보에 접근 가능)
이를 이용해 애노테이션이 선언되어있는 파라미터의 객체가 익명사용자 즉, “anonymousUser”
인지 아닌지에 따라 다른 객체를 반환하도록 정의 할 수도 있다.
// 기존
@AuthenticationPrincipal Long userId,
// SpEL 적용
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : #this") Long userId,
즉 비회원이라면 userId=null일 것이고, 회원이라면 userId=userId가 저장될 것이다.