TIL(Today I Learned)

TLI 49일 (23. 7. 20. 목)

seed0335 2023. 7. 20. 21:30

1. 오늘 배운 내용

열심히 스프링 시큐리티를 배우고 있습니다. 

잘 설명된 좋은 자료가 없어서 어려웠는데,

막상 구조를 보니, 굉장히 잘 설계되었있는 시스템이어서, 흥미있게 배우고 있습니다.

그림으로 보면 이해가 잘 되는데, 저작권이 있어서 못 올리는 게 아쉽네요.  

  1. 사용자의 요청이 filter를 거쳐서 10개 이상의 필터를 거치는데, 
    1. 그중 중요한 것은 
      1. AuthorizationFilter
      2. 기본 페이지를 보여주는 필터
      3. 유저 네임과 패스워드 인증하는 필터가 있습니다. (. UsernamePassowrdAuthenticationFilter)
      4. 여기서 인증 정보를 
      5. AuthenticationManager로 보냅니다. 구현체는 ProviderManager입니다. 
      6. 그러면 매니저에서 위에 인증을 처리할 수 있는 AuthenticationProvider 인터페이스에서
      7. 맞는 구현체를 목록에서 찾습니다.
      8. 위에 경우에는 DaoProvidermanger입니다. (여기서 결국 유저가 입력한 비밀번호와 저장된 비밀번호를 비교합니다.) 
      9. 그러면 여기서, loadUserByUsername() 이라는 메서드로 유저네임으로, 
      10. 사용자가 설명한 DB 또는 메모리 기타등등의 곳에서(개발자가 정한 곳) username 정보로 값을 찾습니다. 
      11. 그다음 UserDatils로 반환합니다. 
      12. 8번에서 암호 비교 후 거꾸로 값이 전달됩니다. 메서드니까요. 
    2. 실제로 내부 구현은 인터페이스와 여러 구현체로 되어있는 단순한 구조입니다. 물론, 구현체를 설계한 코드가 복잡할 수 있지만, 실제 기능은 단순합니다. 가져오고, 비밀번호 같으면 통과 아니면 거부입니다. 그러니까 어려워 할 필요없다. 
    3. 더 자세한 설명은 유데미에 스프링 시큐리티 강의를 보면 됩니다. 할인하면 15000원 밖에 안하는데, 내용은 엄청납니다. (단점은 영어라는 것, 근데 맨날 보는 코드가 다 영어잖아요 ㅎㅎ, 새삼스럽게 두려워할 필요없다. ㅎㅎ )