오늘은 Spring Security에 대해 이해한 내용을 적어보도록 하겠다.
Spring Security에 완벽하게 이해한 내용은 아니지만 어떠한 기능인지 감을 잡은 내용이다.
우선 Spring Security 에 대해 알아보자.
Spring Security
Spring Security란 Spring boot에서 제공하는 인증/인가 기능으로 Session을 기반으로 동작한다.
여기서 인증/인가란 예를들어 쉽게 말하면 사용자의 로그인과 로그인한 사용자가 어느 정도까지의 웹페이지를 사용할 수 있는지를 나타낸다.
마지막으로 Spring Security에서 중요하게 알아야 할점은 Filter이다 이렇게 생각 한 이유는 Spring Security는 Filter를 알아야지 어떤식으로 동작하는지 감을 잡을 수 있다고 생각하기 때문이다.
Filter
Filter란 Web 애플리케이션에서 관리되는 영역으로 Client로 부터 오는 요청과 응답에 대해 최초/최종 단계의 위치이며 이를 통해 요청과 응답의 정보를 변경하거나 부가적인 기능을 추가할 수 있다.
쉽게말해 프로젝트를 실행할때 맨처음과 맨마지막에 동작하는 기능으로 맨처음에 설정한 값과 맨 마지막에 설정한 값에 대해 클라이언트가 만족시키지 못하면 기능의 제한을 두는것과 같다고 생가한다.
코드를 통해 Spring Security가 어떻게 동작하는지 알아보자.
첫번째로 Spring Security를 프로젝트에 사용하기 위한 작업이다.
위와 같이 build.gradle에 라이브러리를 추가하고, Application에 @SpringBootApplication 어노테이션을 적용한다.
위의 코드는 Spring Security가 어떤 기능들을 수행할지 적용해주는 코드로 사용할기능, 어떠한 url을 처리할지, 필터의 동작 순서등을 정한다.
우선 초록색줄로 표시된곳의 코드는 Session기반으로 도장하는 Spring Security를 Jwt 방식으로 사용할 수 있게 해주는 코드이다.
다음으로 첫번째 노랑색으로 표시된곳은 어떤 url들을 점검할지, 않할지를 선택해주는것이다.
두번째 노랑색으로 표시된곳은 사용자가 사용할 로그인페이지의 url을 설정해주는 곳이다.
Spring Security는 기본으로 제공하는 로그인 페이지가 있어서 직접 구현한 로그인 페이지를 사용하려면 이러한 방법으로 표시해준다.
마지막으로 빨강색으로 표시된 부분은 구현한 필터가 어떠한 순서로 적용될지 정해주는 것이다.
위의 코드에선
jwtAuthorizationFilter(),
jwtAuthenticationFilter(),
UsernamePasswordAuthenticationFilter.class
등과 같은 필터들을 확인할 수 있는데 .class는 Spring Security에서 이미 적용되어있는 필터를 말하고 jwt로 시작하는 필터는 직접 구현한 코드이다.
http.addFilterBefore() 메소드를 사용해 어떤 필터가 먼저 사용될지 적용할 수 있는데 첫번째 인자가 두번째 인자보다 먼저 실행된다.
이후는 생성된 필터들이 어떤 기능을 수행는지와 이러한 필터들을 Spring Security에 어떻게 적용하는지를 알아보아야 한다.
하지만 그것에 대한 이해는 아직 부족하여 부족한 부분을 보충 후 내용을 추가하도록 하겠다.
Spring Security를 직접 사용해 보려면 지금까지 설명한 개념들이외에 추가적으로 이해해야 할 부분이 있다.
Spring Security가 어떤 필터를 가지고 있는지와 그 필터들이 어떤 기능을 가지고 있는지 등을 이해해야할것같다.
지금은 작성한 내용이 부족하지만 Spring Security에서 중요한 점이 필터부분인것 같고 이 필터를 이해한다면 충분히 직접 사용해 볼 수 있을것 같다는 느낌이 든다.