본문 바로가기

Language/Spring Security

포인트 컷 메서드 보안 구현 - AspectJExpressionPointcut / ComposablePointcout

728x90
  • 메서드 보안은 AOP 를 기반으로 구축되었기 때문에 어노테이션이 아닌 패턴 형태로 권한 규칙을 선언 가능
    요청 수준의 인가와 유사한 방식
  • 자체 어드바이저(Advisor)를 발행하거나 포인트컷(PointCut)을 사용하여 AOP 표현식을 애플리케이션의 인가 규칙에 맞게 매칭할 수 있으며 이를 통해 어노테이션을 사용하지 않고도 메소드 수준에서 보안 정책을 구현 가능
  • AspectJExpressionPointcut을 사용하기 위해서는 spring-boot-start-aop 의존성 추가 필요

빈 정의하기 - 단일 포인터컷

 

  • *execution(io.security.MyService.user(..))
    • execution = 실행
    • * = 반환값 ( * = 반환타입 관계없음)
    • io.security.MyService.user = io.security 패키지 안에 MyServcie 클래스의 user메서드를 호출할 때 권한 규칙 발동
    • 스프링이 초기화되면서 MyService에 있는 user를 찾아가서 Advice(MethodInterceptor)를 등록하고 MyService는 Proxy 객체로 생성
      → 어노테이션에 의해서가 아니라 pattern.setExpression()에 의해 생성

빈 정의하기 - 다중 포인터컷

  • 여러 개에 포인트 컷을 설정하여 MyService의 user와 display에 권한 규칙 설정
  • ComposablePointcut을 사용하여 pointcut을 등록
  • 표현식을 execution( io.security.Service.*(..)) 설정하면 모든 메서드에 AOP 인터셉터가 등록
728x90