아이퐁퐁
268
2021-11-28 12:56:35
2
162

스프링 시큐리티 로그인 유저의 닉네임 정보 가져오기 질문있습니다


안녕하세요

하지만 제가 글을 작성할 때 유저 아이디와 닉네임도 함께 받아서 넘겨줘야 하는데 
이전 질문에서 감사하게도 답변을 주신 분이 사용자 정의의 유저 로그인 정보는 Authentication 와 getPrincipal(); 을 이용하면 출력할 수 있다는 답변을 주셔서

아이디는 


Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
Object user1 = authentication.getPrincipal();
System.out.println(user1);


이걸로 출력이 되는데 유저의 닉네임을 출력하는 방법을 모르겠습니다. 
구글에도 검색해봤는데 제 실력이 부족한지 위와 같은 비슷한 예만 계속 나오네요... 
며칠동안 이것만 매달리니까 너무 머리가 아프네요 ㅠㅠ 

혹시 방법을 아시면 답변 주시면 감사하겠습니다!!
0
  • 답변 2

  • Dierslair
    5k
    2021-11-28 14:03:02

    getPrincipal() 로 받은 객체를 본인이 인증하실 때 구현한 UserDetails 로 다운캐스팅 하셔서 사용하시면 됩니다.

    MyUserDetails userDetails = (MyUserDetails) authentication.getPrincipal();
    String nickname = userDetails.getNickname();


  • 아이퐁퐁
    268
    2021-11-28 22:34:03 작성 2021-11-28 22:44:03 수정됨

     Dierslair 님 항상 답변 주셔서 정말 큰 도움을 받고 있습니다. 감사합니다.

    말씀해주신대로 

    CustomUserDetails userDetails = (CustomUserDetails) authentication.getPrincipal();
    
    		String usernick = userDetails.getUserNick();
    
                     System.out.println(usernick);

    위 형태로 사용해봤으나

    CustomUserDetails userDetails = (CustomUserDetails) authentication.getPrincipal(); 

    위 해당 줄을 가리키며 아래와 같은 오류가 발생하고 있습니다.

    java.lang.ClassCastException: class java.lang.String cannot be cast to class com.yoohyun.diary.vo.CustomUserDetails (java.lang.String is in module java.base of loader 'bootstrap'; com.yoohyun.diary.vo.CustomUserDetails is in unnamed module of loader org.apache.catalina.loader.ParallelWebappClassLoader @5ef6ae06)

    이라는 해당 오류가 발생하고 있습니다.

    String을 CustomUserDetails 로 캐스팅할 수 없다는 오류인 것 같은데 정확히 이게 무엇을 의미하는지 모르겠습니다...

    이 오류가 이전에 구글링을 했을 때 사용했던 예제에서도 동일한 오류를 계속해서 봤는데 혹시 이 오류는 어떤 오류인지 알고 계신다면 답변을 부탁 드려도 될까요? 



  • 로그인을 하시면 답변을 등록할 수 있습니다.