현재로서
웹 애플리케이션 내에서
Spring Security의 도움으로
API 경로 또는 URL 위에
인가를 적용했습니다
하지만 API 경로들을 보호하는 것 이외에도
Spring Security는
메소드의 보호도 제공합니다
아시다시피 Java 안에서는
작성하는 모든게
메소드의 도움으로 이루어집니다
모든 비즈니스 로직은
Java 메소드 속에 남습니다
따라서 Spring Security 내에서
사용 가능한
이러한 메소드 정도의 보안의 도움을 받아
Java 메소드가 controller layer
service layer
repository layer중 어디에 있더라도
인가를
강제로 할 수 있습니다
하지만 기본적으로 이런 메소드 레벨 보안은
활성화 되어 있지 않습니다
Spring Security에 대하여
의존성을 가진
웹 애플리케이션 내에서
이러한 메소드 레벨
보안 기능의 활성화를 위해서는
@EnableMethodSecurity라는
주석을 사용해야 합니다
이 주석은 Spring Boot 애플리케이션의
메인 클래스 또는 구성 클래스 위에 인가 규칙을
적용할 수 있습니다
그리고 메소드 정도의 보안의 도음으로
웹이 아닌 애플리케이션에서도
강제로 인가를 할 수 있습니다
고객을 위해 독립형 애플리케이션
또는 데스크톱 애플리케이션을 개발 중이라면
모든 브라우저에서 접근 가능한
REST API 또는 URL이
없을 것입니다
이런 상황의 경우
메소드 정도의 보안을 활용하여
일부 권한 규칙을 강제하여
접근 권한이 있는 사용자만이 Java 메소드를 호출할 수 있도록 합니다
Java 메소드를
호출할 수 있도록 합니다
이는 메소드 레벨 보안의
또다른 장점이 되겠습니다
이제 여기서
"메소드 레벨 보안에 대해 더욱 자세하고
디테일한 설명을 주실 수 있습니까?
메소드 레벨 보안을
활용할 수 있는 상황들은 어떤게 있습니까?"
와 같은 질문들이 떠오르실 수도 있습니다
메소드 레벨 보안을
고려할 수 있는 첫번째 상황은
호출 인가입니다
어떠한 Java 메소드 위에
특정 메소드의 호출을 위해
메소드 레벨 보안을 사용하게 되면
로그인된 유저 또는 엔드 유저가
이에 따른 권한이나 역할을 구성하는 데 필요한
설정이 있어야 합니다
그렇지 않으면 메소드를
호출할 수 없습니다
따라서 이는 웹 애플리케이션 내에서
보안의 두번째 레벨이
될 수 있습니다
API 결오와 URL에
인증과 인가를
실시하는 것 이외에
이러한 메소드 레벨 보안은 언제나
보안의 두번째 레벨로
취급할 수 있습니다
보안의 단계가 두개가 되면
애플리케이션은 더욱 잘 보호되어
애플리케이션을 해킹하는 것을
불가능하게 해줄 것입니다
두번째로 메소드 레벨 보안을
사용할 수 있는 상황은
필터링 인가입니다
아시다시피 Java 메소드는
다량의 input 데이터를 받습니다
input을 처리하고 비즈니스 로직을
실행한 후 자바 메소드는 많은 데이터를
다시 돌려주기도 합니다
필터링 인가의 도움을 통해
필터링 조건
또는 권한과 규칙에 의해
어떤 데이터를 수락하고 싶은지
어떤 데이터를 엔드 유저에게
돌려 보내고 싶은지
검증할 수 있습니다
이상 메소드 레벨 보안을
웹 게시중에 활용할 수 있는 상황
두 가지였습니다
그리고 여기
@EnableMethodSecurity 어노테이션을
단독으로 언급하는 것은 충분하지 못합니다
따라서 이는 웹 게시중에
해당 기능을 활성화시키기
위해 만들어야 하는
첫 구성입니다
그리고 해당 변경 사항들이
완료되고 나면
Spring Security 내에서
메소드 레벨 보안을 실시하기 위해
수많은 주석이 사용 가능해집니다
주석 중 첫 세트는
@PreAuthorize 그리고
@PostAuthoriza입니다
이 PreAuthorize와 PostAuthorize
주석들을 활용할 때마다
prePostEnabled 이라는
특정 변수를 true로 언급하여
활성화시켜야 합니다
아주 유사하게
@Secured
@RoleAllowed와 같은
주석들이 있습니다
따라서 이는 우리가
메소드 레벨 보안을 활용하기 위한
다양한 주석들입니다
하지만 이러한 모든 주석들이
어떻게 서로 다른지에
대해 물어보신다면
이 주석들은
서로 다른 명세서와 라이브러리에서 왔습니다
따라서 해당 주석들을 활용하기 위해서는
prePosetEnabled
securedEnabled
jr250Enabled과 같은 변수를
주석 @EnableMethodSecurity에게
true로 보내
이들을 특정적으로
활성화시켜야 합니다
여기서 이중에 어떤 주석을
웹 애플리케이션 내에 사용할 수 있을지 등의
궁금증이 나타날 수 있습니다
저는 항상
@PreAuthorize와 @PostAuthorize를
활용하시길 추천 드립니다
왜냐하면 이들은 더욱 강력하고
해당 주석들을
사용할 경우
Spring Expression Language (SpEL) 활용도 가능합니다
이렇게 @PreAuthorize과 @PostAuthorize
주석들의 도움으로
구성할 수 있는
인가 규칙들을
살펴 보았습니다
@Secured과
@RoledAllowed는
덜 강력합니다
따라서 이번 강의를 통해
@PreAuthorize와
@PostAuthorize 주석들을
디테일하게 살펴볼 것이고
해당 주석들은 우리
EazyBank 웹 애플리케이션에서 사용할 것입니다
메소드 레벨 보안
그리고 이를 사용 중에
Spring Security 프레임워크 내에
어떤 주석들이
관련되어 있는지에 대해
괜찮은 시작이었길 바랍니다
다음 수업에서는
@PreAuthorize와
@PostAuthorize을 이용하여
권한을 실시하는 방법을
다뤄보도록 하겠습니다
그럼 다음 강의에서 뵙겠습니다
감사합니다