가끔은 클라이언트로부터 특이한
요구사항을 받습니다
한 가지 특이한 요구사항은
웹 애플리케이션에 오는 모든 요청을
거절해달라는 겁니다
이걸 충족하기 위한 메소드도
Spring Security 프레임워크 안에 있습니다
하지만 그 얘기를 하기 전에
이런 의문을 가질 수 있습니다
누군가 웹 애플리케이션에 오는
요청을 모두 거부하고자 하는
시나리오는 무엇일까?
시나리오는 무엇이든 될 수 있지만 예를 들어보겠습니다
한 예는 여러분의 애플리케이션을
종료하는 대신 백엔드 서비스가
프론트엔드 애플리케이션에서 오는
모든 요청을 거부하기를
클라이언트가 요청하는 것입니다
보안 테스트나 유스케이스 테스트를 위해
그렇게 할 수도 있을 것입니다
생각해볼 수 있는 또 하나의 예는
어떤 하위 환경에 대한 시나리오가 있는 경우입니다
모든 요청을 거부하길 원하지만
운영 환경에서는
실제 사용자 정의 보안 요구사항을 적용하고자 하는겁니다
Spring Boot에는 프로필이라는 개념이 있습니다
프로필의 도움을 받아
여러분의 애플리케이션이 배포되는
현재 환경에 따라 조건적으로
bean을 생성할 수 있습니다
Spring Boot 프로필이 익숙하지 않다면
Udemy에서 Spring과 Spring Boot를 다루는
저의 강의를 찾아보는 것을 추천해드립니다
Spring Boot 프로필을 사용해
우리는 간단하게 이런 요구사항을 충족할 수 있습니다
하지만 여기서는 Spring Boot가 문제가 아닙니다
여러분의 웹 애플리케이션에 오는
모든 요청을 거부하는 방법을 알고자 합니다
이건 굉장히 간단합니다
보시다시피 denyAll이라는 메소드가 있는데
anyRequest라는 메소드와
함께 호출해야 합니다
이 메소드를 사용하면
Spring Security 프레임워크에 의해
모든 요청이 거부됩니다
하지만 이건 운영상 추천드리는 접근은 아닙니다
슬라이드에 하이라이트 했듯이
운영에 이런 수정 사항을 집어넣으면
여러분의 애플리케이션은 쓸모가 없어지고
어떤 역할 어떤 자격 증명을
사용하든지 아무도
그 애플리케이션을 사용할 수 없을 겁니다
그걸 이해했다면 이 수정 사항을
우리 Spring Boot 웹 애플리케이션에 빠르게 적용해보고
실전에서 어떻게 작동하는지 보겠습니다
이 수정을 적용하기 전에
여러분이 참고할 수 있도록 이 코드 라인을 주석으로 달겠습니다
이 라인을 주석으로 달았습니다
주석 라인 위에
참고용으로 약간의 주석을 입력하겠습니다
아래는 사용자 정의 보안 설정이라는
주석을 입력하고 있습니다
이제 앞의 코드를 가지고 와서
여기에 똑같이 입력하겠습니다
requestMatchers 대신
anyRequest를 호출하겠습니다
모든 요청을 거부하길 원하니까
anyRequest를 호출하는 겁니다
이 anyRequest 다음으로
denyAll 메소드를 호출하겠습니다
이 정도 수정이면 됩니다
빌드하겠습니다
빌드가 끝나면 브라우저로 갑니다
브라우저에서 우리 API 중 하나인
myAccount에 접근하겠습니다
보시다시피
자격 증명을 입력하라고 합니다
여기에 유효한 자격 증명을 입력하면
예를 들어 eazybytes, 1, 2, 3, 4, 5,
응답이 없습니다
대신 403 응답을 반환하는데
제가 인증되지 않았거나 요청이 거부되었다는 뜻입니다
모든 API가 똑같이 작동할겁니다
공지사항에 접근하려고 하면
같은 403 에러를 반환합니다
문의하기도 마찬가지입니다
이렇게 우리 웹 애플리케이션에 오는 모든 요청을
거부하고 있습니다
여기서 Spring Security가 왜 자격 증명을 요구하는지
질문이 있을 수 있습니다
두 가지 개념을 이해하셔야 하는데
하나는 인증 다음에 인가입니다
우리가 요청을 거부할 때
인가가 등장합니다
요청을 거부하려면 먼저
요청을 인증해야 합니다
그래서 먼저 자격 증명을 요구하는 겁니다
자격 증명이 입력되면
인증이 성공적이었지만
인가 거부 에러인
403 에러를 반환합니다
인증과 인가
그리고 그 차이점에 대해서는
추후 강의에서 더 이야기하고자 합니다
명확히 이해하셨으면 좋겠습니다
여기에는 여러분이 참고할 수 있도록
모든 요청을 거부하는 설정이라는
Java 주석을 남겨 놓겠습니다
이건 참고용일 뿐입니다
전부 명확히 이해하셨으면 좋겠습니다
감사드리며 다음 강의에서 만나겠습니다
수고하셨습니다