[Error] class java.lang.String cannot be cast to class org.springframework.security.core.userdetails.User

    문제 코드

    문제의 코드는 아래와 같다. 해당 에러의 경우 (UserDetails) 처럼 바로 강제 형변환을 해서 발생한 것 같았다.. 하지만 UserDetails의 경우 강제 형변환 대신 String.valueOf()를 사용할 수 없다. 

    public class SecurityUtil {
        public static String getLoginUsername(){
            UserDetails user = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrinciPal();
            return user.getUsername();
        }
    }

     

     

     

    수정

    public class SecurityUtil {
        public static String getLoginUsername(){
            // TODO: 이곳에, 로그인한 유저가 있으면 반환, 없으면 예외 발생
            Authentication loggedInUser = SecurityContextHolder.getContext().getAuthentication();
            String username = loggedInUser.getName();
            return username;
        }
    }

     

    그래서 구글링을 하던 와중 다음과 같은 자료를 발견하여 바로 적용해주었더니 에러 해결이 되었다!

     

     

    https://stackoverflow.com/questions/32276482/java-lang-classcastexception-org-springframework-security-core-userdetails-user

     

    java.lang.ClassCastException: org.springframework.security.core.userdetails.User cannot be cast to model.User

    I am using Spring Security in my application. I need loggedIn user details in the controllers of my application. For that I am using this code User loggedInUser = (User)SecurityContextHolder.

    stackoverflow.com

     

    댓글