본문 바로가기

backend/Spring

01. 스프링 시큐리티(spring-security) - DB와 연동(유저, 유저권한)

spring-web으로 로그인을 개발하다 보면 언젠간 만나게되는 스프링시큐리티(spring-security)에 대해서 정리해보겠습니다.

아래 spring doc을 참고하여 작성하였습니다.

참고: https://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#what-is-acegi-security
참고 : http://dev.anyframejava.org/docs/iam/1.1.3/reference/html/apㄱ.html
참고 : https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/filter/package-summary.html


보통 처음 스프링을 배우신 분이라면, Controller에서 부터 개발을 시작하셨을 경우가 많을 텐데요.


위 그림에서 보시면, controller의 @RequestMapping전에 Filter chain proxy를 통해서 많은 일들이 발생하는 걸 알 수 있습니다.





build.gradle

좀 더 이해하기 쉽게 간단한 그림을 그려보았습니다.
ApplicationFilterChain 클래스에서 filters를 가지고 있고, 그 중에 하나가 바로 우리가 알고 싶은 springSecurityFilterChain입니다. 1번을 아래 처럼 ApplicationFilterChain의 filters를 직접확인 해보실수 있습니다.



build.gradle



  • CharacterEncodingFilter : 요청에 대한 문자 인코딩을 지정할 수있게 해주는 서블릿 필터입니다.
  • HiddenHttpMethodFilter : 게시 된 메소드 매개 변수를 HTTP 메소드로 변환하는 필터로, HttpServletRequest.getMethod ()를 통해 검색 할 수 있습니다.
  • HttpPutFormContentFilter : HTTP PUT 또는 PATCH 요청 중에 ServletRequest.getParameter * () 패밀리 메소드를 통해 양식 인코딩 데이터를 사용할 수있게 해주는 필터.
  • RequestContextFilter : LocaleContextHolder 및 RequestContextHolder를 개입시켜, 현재의 thread에 요구를 공개하는 Servlet 필터.


또한, springSecurityFilterChain내부적으로는 security와 관련된 filter를 가지고 있습니다. 2번을 아래 처럼 DefaultSecurityFilterChain의 filters를 직접확인 해보실수 있습니다.


build.gradle




그렇다면 여기서 우리가 security를 db와 연동하면서 사용할 부분은 어디일까요?

build.gradle

위에 노란색으로 표시된 부분이 DB와 연동하여 우리가 구현해야할 부분입니다. 우선 구현하기 전에 간단하게 스프링 Filter의 역할과 securityFilter가 어디에 위치해 있는지에 대해서 알아보았습니다.


간단히 소개글을 쓰려고 했는데 글이 길어 졌네요 그럼 다음글에서 구현을 진행해보도록 하겟습니다~