https://medium.com/@satyakm.dev/understanding-spring-security-internals-with-code-walkthrough-850d5749252c