출처 : https://www.youtube.com/watch?v=riwrVN1JVbU&list=PL93mKxaRDidERCyMaobSLkvSPzYtIk0Ah&index=5
물론 제가 개발할 포트폴리오 프로젝트는 session을 사용하지 않겠지만
시큐리티를 이해해야 할 것 같아서 이렇게 정리합니다.
시큐리티 세션에 들어갈 수 있는 객체가 정해져 있는데 그건 Authentication 이여야 합니다.
Authentication 안에 User정보가 들어가 있어야 하며
User Object의 타입은 => UserDetails 타입 객체 입니다.
정리하면 (Security Session => Authentication => UserDetails) 이런 구조여야 합니다.
그렇게 잘 담기면 마지막에 SecurityContextHolder에 담기는 것 입니다.
이제부터 PrincipalDetails 는 UserDetails 타입이기도 합니다.
제가 만들어 뒀던 유저 정보를 저장하는 객체 클래스는 UserModel 입니다.
따라서 UserModel도 가져와 생성자에 넣어서 초기화 시켜주는 것을 알 수 있습니다.
GranteAuthority 는 해당유저의 권한을 물어보는 것으로
넣어 줘야 하는 값이 GrantedAuthority인데 아래 코드와 같이 문자열을 반환 할 수 있습니다.
나머지 부분은 주석 처리된 부분을 확인해 주시면 됩니다.
로그인 처리할 때
원래대로라면 loginProcessingUrl("/login") 으로 저장되어 링크를 타고 들어 옵니다.
하지만 지금 해당 프로젝트는 formlogin이 아니며 자동 login도 타고 오지 않지만 일단 개념적으로는
Form login, login url이 설정되어 있다고 가정한다면
Login 요청시
UserDeatailsService 인터페이스를 상속받은 PrincipalDetailsService 객체를 찾아
loadUserByUsername 메소드를 실행시켜줍니다.
규칙이라고 합니다.
참고로
변수명은 같아야 합니다.
필요한 로직을 만들어 줍니다.
저대로 반환된다면,
원래 대로라면 세션을 이용하는 프로젝트 일때는 저렇게 담겨
로그인이 완료 되어 세션이 세션 스토리지에 저장됩니다.