AccountAdapter : Spring security user를 상속받아 객체 생성
- 솔직히 왜 이렇게 바꿔서 사용하는 지 모르겠다 .....
확인 해 봅시다.
public class AccountAdapter extends User {
private Account account;
public AccountAdapter(Account account) {
super(account.getEmail(),account.getPassword(),authorities(account.getRoles()) );
this.account = account;
}
private static Collection<? extends GrantedAuthority> authorities(Set<AccountRole> roles) {
return roles.stream().map(r -> {
return new SimpleGrantedAuthority("ROLE_" + r.name());
}).collect(Collectors.toSet());
}
public Account getAccount(){
return account;
}
}
AccountService 변경 : AccountAdapter로 리턴하는 걸로 변경
@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
Account account = accountRepository.findByEmail(username).orElseThrow( () -> new UsernameNotFoundException(username));
return new AccountAdapter(account); //AccountAdapter로 리턴하는 걸로 변경
}
사용자 정보 확인 및 활용 예제 : EventController
handler method에 @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : account") Account account 를 추가
expression은 AccountAdapter에서 account를 사용한다는 의미
@PostMapping
public ResponseEntity createEvent(@RequestBody @Valid EventDto eventDto , Errors errors
,@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : account") Account account){
Event event = modelMapper.map(eventDto,Event.class);
event.setManager(account); // account를 주입 받아 등록
}
@GetMapping
public ResponseEntity queryEvents(Pageable pageable, PagedResourcesAssembler<Event> pagedResourcesAssembler, @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : account") Account account){
/***************************
* 로그인 했는지 확인
************************/
if(account !=null){
to-do
}
}
@GetMapping("/{id}")
public ResponseEntity getEvent(@PathVariable Integer id,@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : account") Account account){
Optional<Event> optionalEvent = eventRepository.findById(id);
Event event = optionalEvent.get();
/****************************************
* 로그인 한 user가 event의 등록자 인지 비교
**************************************/
if(event.getManager().equals(account)){
to -do
}
}