📌Security 로그인
- 시큐리티를 활용하여 로그인 하기 위한 코딩 로직
- securityconfig에 인증이 필요한 페이지를 설정해놨고 로그인이 필요한 페이지의 주소를 검새가면 "/auth/login"으로 가게끔 설정해놨다.
- 만일 인증(로그인)이 완료되면 인증이 필요한 페이지도 접근이 가능하다.
- 그런데 로그인을 하기 위해서는 Get방식이 아닌 Post방식으로 접근해야 한다. Get방식은 주소에 아이디와 패스워드가 다 보이기 때문이다.
그래서 만일 로그인 할때 Post방식에 "/auth/login" 으로 요청이 오면
Spring securirty인 UserDetailsService가 작동하는데 내가 UserDetailsService를 인터페이스한 PrincipalDetailsService가 작동하게 된다(즉, PrincipalDetailsService로 바뀐것). 그래서 패스워드는 자동적으로 DB에 있는지 확인해주고 username은 정보를 가지고 확인해야 한다. 정보가 맞다고 하면 세션에 자동으로 등록해준다 그리고 없다하면 다시 로그인 페이지로 돌아가게 된다.
- 그런데 시큐리티로 세션에 저장하게 되면 session에 그냥 담기는게 아니라 authentication이라는 객체 안에 principaldetails(user가 담겨져 있음)가 담기게 되서 그게 session에 securityContextholder객체에 들어가게 되는 것이다.
- 그래서 user를 나중에 꺼내어 쓰려고 하면 session에 sesecurityContextholder에 authentication에 principaldetails에 있는 user를 꺼내서 써야하는데 너무 복잡하니까 어노테이션을 spring에서 만들어놈
- 그게 바로 @AuthenticationPrincipal 이다. 바로 세션에PrincipalDetails(UserDetailsService 인터페이스받음) 객체에 접근이 가능하다.