스프링 애플리케이션을 구현해본 경험이 있다면 스프링 프레임워크의 철학에 기반해 생각해볼 수 있다. 개발자는 스프링 컨텍스트에 빈을 정의해 프레임워크가 지정된 구성을 바탕으로 이러한 빈을 관리하도록 한다. 어노테이션으로 엔드포인트 노출, 트랜잭션 내의 메서드 매핑, 애스팩트 내의 메서드 가로채기 등의 수행 작업을 스프링에 지시한다.
스프링 시큐리티 구성도 마찬가지다. 어노테이션, 빈, 스프링 방식의 구성 스타일을 능숙하게 이용해 애플리케이션 수준의 보안을 정의하는 것이다. 애플리케이션에서 보호해야 하는 동작은 메서드로 정의된다.
위 그림은 애플리케이션이 실행되는 환경과, 애플리케이션이 처리하고 저장하는 데이터를 보호하기 위해 해야하는 모든 것을 나타낸다. 이것은 애플리케이션에 사용되고 영향을 받는 데이터에만 국한되는 문제가 아니다. 악의적인 개인이 전체 시스템에 영향을 줄 수 있는 취약성이 있을 수 있다.
보안은 각 계층에 적용되고 각 계층은 그 아래의 계층에 의존한다. 스프링 시큐리티는 최상층에서 애플리케이션 수준의 보안을 구현하는 프레임워크이다.
인증과 권한 부여는 사실상 거의 모든 애플리케이션에 사용된다. 인증은 애플리케이션이 사용자를 식별하는 방법이다. 사용자를 식별하는 목적은 나중에 그들이 무엇을 하도록 허용해야 하는지 결정하기 위한 것이다. 이것이 권한 부여다.
애플리케이션에서 다양한 시나리오를 위해 권한 부여를 구현해야 하는 경우가 많다. 대부분 애플리케이션에는 사용자가 특정 기능에 대한 접근 권한을 얻는 데 제한이 있으며, 접근 권한을 얻으려면 먼저 누가 접근을 요청하는지 알아야 한다. 즉, 인증을 해야한다.
또한 사용자가 시스템의 해당 부분을 이용하도록 허용하려면 사용자에게 어떤 이용 권리가 있는지 알아야 한다. 시스템이 복잡해지면 특정한 인증과 권한 부여의 구현이 필요한 다양한 상황이 발생한다.
이외에도, 저장 데이터(Data at Rest)와 전송 중 데이터(Data in Transit), 내부 메모리 관리 등의 여러 분야에서 보안적인 요소는 필수적이다.