[rest api 프로젝트 구축] - spring security (9) 스프링 시큐리티 사용자 정보

geun kim·2023년 3월 28일
0

REST API 구축

목록 보기
20/20

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
        }
}    
profile
Devops Load Map

0개의 댓글