{"componentChunkName":"component---src-templates-post-template-jsx","path":"/works/posts/2020-09-09--001","result":{"data":{"site":{"siteMetadata":{"title":"Blog by Eunyoung","subtitle":"작업 기록 블로그","copyright":"© All rights reserved.","author":{"name":"EunYoung","twitter":"#"},"disqusShortname":"","url":"https://ssongey.github.io"}},"markdownRemark":{"id":"12fd07c0-3f26-57fa-860a-d8a6388cd6cb","html":"<p>모든 req/res DB 로깅은 interceptor 에서 진행하였고,<br>\n로그인/ 로그아웃에 대한 req/res 로깅은 AuthenticationProvider 클래스를 구현한 곳에서 로깅을 하였는데,\n로그인 로그아웃에 대한 로깅 위치에 대한 의문을 가지게 되었다.  </p>\n<h3>#. Spring Security 구조</h3>\n<p>\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/devHistoryBlog/static/c70bd01ebcabd2d11fd60e720d57ed24/e3189/1.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 960px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 73.75%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAPCAYAAADkmO9VAAAACXBIWXMAABJ0AAASdAHeZh94AAACPklEQVQ4y52TDW+aUBSG+f9/ZlljljVr2rS2a5SpdauIE1AEP5AvAUG+9N25d2qwapbsJCdc9HLu+z7nXAH72O12PFkUZQl94UGdOdAqqU4dGEsf2+3u+M3HEA6FqgXzokRL1iH2J/vUeTYkHe/aHOV2eyKimsLZEfRjlm7YAv8TQkn2iqJAludYpznCOIUXxkizHOlmgyCKsXA8LN0VFraHcJ0gpQM3aQaf/gvoPVjHfB9DJbiui16vh6E2wuObgof2b9y3FegzG5s4gjRe4LYh4dPdK76+vkOaOEjWEVRjjs9PHdSeu6i9/MRNvYuJ5Z1a3hKbMAyRk1rGoywLbA9cswxBsEIURbSvpD0Fd+NHyfGZEXvelJisRknKnwvbJfkJkqxgOHkDhqaN7tCA2FPh+GFFABXOUkKW77kTQ+a7rVr4QnZuHtuo1d/w0B2hpZFl4shGRNYtKmjiF3WYqTmEPLEI0ZCjashT4l5AYM3ojl28yHN8+0H8OipEzUVLtZGQ4kvBlLNGOn4Ay4vgBDHcMOFuBMaiOVzgSZrhrq3yrNP6uzw7Flx6AXqKAdVkh2TcYhzH2JHlC2NDjKYeJMODPPUhm2ztYkBPZpnFmG7J7XMb9+I7vCA6UfrvwT6z97fLbO4sy6IpCM5uVvUKCoxFp9NBs9mEKIrQNA227WC5XHJOBymiPIFu+ZUrd+WmsNlT1RH6/QEGAwWKonEltm0fC7ICbMYKwoMryioFdzCMFSnzeJrm6qLla+8f4w+gzntp1UP0DQAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n    >\n      <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"1\"\n        title=\"\"\n        src=\"/devHistoryBlog/static/c70bd01ebcabd2d11fd60e720d57ed24/d9199/1.png\"\n        srcset=\"/devHistoryBlog/static/c70bd01ebcabd2d11fd60e720d57ed24/8ff5a/1.png 240w,\n/devHistoryBlog/static/c70bd01ebcabd2d11fd60e720d57ed24/e85cb/1.png 480w,\n/devHistoryBlog/static/c70bd01ebcabd2d11fd60e720d57ed24/d9199/1.png 960w,\n/devHistoryBlog/static/c70bd01ebcabd2d11fd60e720d57ed24/e3189/1.png 1035w\"\n        sizes=\"(max-width: 960px) 100vw, 960px\"\n      />\n    </span>\n  </span>\n  \n  </a>\n    </p>\n<h3>#. 구현내용</h3>\n<ul>\n<li>AuthenticationProvider 의 구현체에서 authenticate() 메소드를 Override 받아 로그인 확인 로직을 구현하였다.  </li>\n<li>req 데이터에 대한 로깅은 여기서 진행\n\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/devHistoryBlog/static/265b4b7d063968a25eb05613d411e5cb/fd8a5/2.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 960px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 26.666666666666668%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAYAAABFA8wzAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAt0lEQVQY02WQaw7DIAyDe552QB5AYbv/ubI4rJO6/bCwIviwszVN1iobi5oKWddsImzELlpzKsU4P4xZfC5xppRt3/fQcRwh+E1rt3M8rZ/DWj9N1MG1hQ8YwIDIUrk+Adz9BfsC8fCcAE6r7qE+po35CjgAKaVbkl/IHxCPAWyeEieASL0SV1+BRqrQpzaSI3HO5fbBpuL1qtdTr6S4tERMXr2u5L6Cgj06EPBSaIGJonbMwpO9Aa47nRXYNhQTAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n    >\n      <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"2\"\n        title=\"\"\n        src=\"/devHistoryBlog/static/265b4b7d063968a25eb05613d411e5cb/d9199/2.png\"\n        srcset=\"/devHistoryBlog/static/265b4b7d063968a25eb05613d411e5cb/8ff5a/2.png 240w,\n/devHistoryBlog/static/265b4b7d063968a25eb05613d411e5cb/e85cb/2.png 480w,\n/devHistoryBlog/static/265b4b7d063968a25eb05613d411e5cb/d9199/2.png 960w,\n/devHistoryBlog/static/265b4b7d063968a25eb05613d411e5cb/07a9c/2.png 1440w,\n/devHistoryBlog/static/265b4b7d063968a25eb05613d411e5cb/fd8a5/2.png 1659w\"\n        sizes=\"(max-width: 960px) 100vw, 960px\"\n      />\n    </span>\n  </span>\n  \n  </a>\n    </li>\n<li>로그인이 성공 할 경우 onAuthenticationSuccess() 를 재정의하여 res 데이터에 대한 로깅을 진행\n\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/devHistoryBlog/static/396c68dc449dee647b552aa528a531f8/f69a0/3.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 960px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 19.583333333333332%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAECAYAAACOXx+WAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAl0lEQVQY02WPWQ7DIAxEc52wesGE9v73mjpuG1XNx9MwRjxgG9Kx5nAUz+V5GOZ6wOaBYRPMjE4Einyvv5B3YgG1Auo99jf2wTwWzAbmnC6y6CIaktYaSimotUb+E/Ocr76RCNRfosPALhG1eNnZu99aa8O+70FK6UZ22W/fmDQEouJCAp/piGpIz6TP93L2Qy7IN9K1fgECVnxKRG6QnAAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n    >\n      <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"3\"\n        title=\"\"\n        src=\"/devHistoryBlog/static/396c68dc449dee647b552aa528a531f8/d9199/3.png\"\n        srcset=\"/devHistoryBlog/static/396c68dc449dee647b552aa528a531f8/8ff5a/3.png 240w,\n/devHistoryBlog/static/396c68dc449dee647b552aa528a531f8/e85cb/3.png 480w,\n/devHistoryBlog/static/396c68dc449dee647b552aa528a531f8/d9199/3.png 960w,\n/devHistoryBlog/static/396c68dc449dee647b552aa528a531f8/07a9c/3.png 1440w,\n/devHistoryBlog/static/396c68dc449dee647b552aa528a531f8/f69a0/3.png 1783w\"\n        sizes=\"(max-width: 960px) 100vw, 960px\"\n      />\n    </span>\n  </span>\n  \n  </a>\n    </li>\n<li>로그인이 실패 할 경우 onAuthenticationFailure() 를 재정의하여 exception에 대한 로깅을 진행\n\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/devHistoryBlog/static/e176badbed20da8902cfaa58cc296475/fe720/4.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 960px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 13.750000000000002%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAADCAYAAACTWi8uAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAiElEQVQI103OWxLDIAgF0GynRhTkoUnb/S/r1thpph9nuPABbF0fUN4RjWBCcMlQqVDzmzRdmhpUdbKVr9meEtKfzSwQETBr8DBEd/QxcL7eGOeB8TxW79G/WoW7w/tYS3POIKLbZi3A81LliioXXplKRi47MqXZM0QamGVmAc9cSplVlt/3lw/JNl6wyRFygQAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n    >\n      <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"4\"\n        title=\"\"\n        src=\"/devHistoryBlog/static/e176badbed20da8902cfaa58cc296475/d9199/4.png\"\n        srcset=\"/devHistoryBlog/static/e176badbed20da8902cfaa58cc296475/8ff5a/4.png 240w,\n/devHistoryBlog/static/e176badbed20da8902cfaa58cc296475/e85cb/4.png 480w,\n/devHistoryBlog/static/e176badbed20da8902cfaa58cc296475/d9199/4.png 960w,\n/devHistoryBlog/static/e176badbed20da8902cfaa58cc296475/07a9c/4.png 1440w,\n/devHistoryBlog/static/e176badbed20da8902cfaa58cc296475/fe720/4.png 1448w\"\n        sizes=\"(max-width: 960px) 100vw, 960px\"\n      />\n    </span>\n  </span>\n  \n  </a>\n    </li>\n<li>AuthenticationException 에 대한 메시지 처리\n\n  <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/devHistoryBlog/static/38561763509c2ad2b5a8ace678c60e70/f2d92/5.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n  \n  <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 960px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 44.99999999999999%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAABYlAAAWJQFJUiTwAAABS0lEQVQoz32RWW7DMAxEc5s4lmXtpCQvcdD7n2lKKUgRp0U/BqIWjB6HFz8rRDshREJMCTEEeO+Rk8XCFhwNKM4gigiJ4LzcB6lFTt699sZaKKVwMVqBggflghgjcjBgb5CZUEoBM4OJQLKGmGCMhdYz9Dxj0lrqp6Zpehq2gv2MHIWqVNSSUYSmNKOYwanKfkUQkmZyu90wXK99Hcfxly7tt+pHLEFjP76wipbCOLLHQqL9wHY8sN0fWEUsnXCucM79UL3r0nCrV1gkp2W7d4NGueaEIhGUvKLWXc42yZGROHfDJLW1rps0spMhWYUsbS/rjiLKnLAKXZFsmWo3Y8oSfuhUw3Bu+d20t7xHhdqmKT/nsvQBMCUkFxE9Icj6DH/+s80T4TRpBKPgje7jf8nKEJxpckIznIL/NDkZzsacHp5+Vu1s/JfoU992XRp2/Db5XAAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n    >\n      <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width: 100%; height: 100%; margin: 0; vertical-align: middle; position: absolute; top: 0; left: 0; box-shadow: inset 0px 0px 0px 400px white;\"\n        alt=\"5\"\n        title=\"\"\n        src=\"/devHistoryBlog/static/38561763509c2ad2b5a8ace678c60e70/d9199/5.png\"\n        srcset=\"/devHistoryBlog/static/38561763509c2ad2b5a8ace678c60e70/8ff5a/5.png 240w,\n/devHistoryBlog/static/38561763509c2ad2b5a8ace678c60e70/e85cb/5.png 480w,\n/devHistoryBlog/static/38561763509c2ad2b5a8ace678c60e70/d9199/5.png 960w,\n/devHistoryBlog/static/38561763509c2ad2b5a8ace678c60e70/f2d92/5.png 1027w\"\n        sizes=\"(max-width: 960px) 100vw, 960px\"\n      />\n    </span>\n  </span>\n  \n  </a>\n    </li>\n</ul>\n<h3>#. AuthenticationException</h3>\n<ul>\n<li>UsernameNotFoundException : 계정 없음</li>\n<li>BadCredentialsException : 비밀번호 불일치</li>\n<li>SessionAuthenticationException : Invalid 한 세션</li>\n<li>AccountStatusException<br>\n— AccountExpiredException : 계정만료<br>\n— CredentialsExpiredException : 비밀번호 만료<br>\n— DisabledException : 계정 비활성화<br>\n— LockedException : 계정잠기  </li>\n</ul>\n<h5>참고</h5>\n<ul>\n<li><a href=\"https://sjh836.tistory.com/165\">https://sjh836.tistory.com/165</a></li>\n<li><a href=\"https://docs.spring.io/spring-security/site/docs/3.1.x/apidocs/org/springframework/security/core/AuthenticationException.html\">https://docs.spring.io/spring-security/site/docs/3.1.x/apidocs/org/springframework/security/core/AuthenticationException.html</a></li>\n</ul>","fields":{"tagSlugs":["/tags/spring-security/"],"slug":"/works/posts/2020-09-09--001"},"frontmatter":{"title":"[Spring] SpringSecurity 에서 req/res에 대한 로깅은?","tags":["SpringSecurity"],"date":"2020-09-09","description":"SpringSecurity 구조"}}},"pageContext":{"slug":"/works/posts/2020-09-09--001"}},"staticQueryHashes":[]}