@EnableGlobalMethodSecurity

김대웅·2021년 9월 28일

@EnableGlobalMethodSecurity(참고)

  • xml 설정의 <global_method_security>설정과 동일한 역할을 수행
  • prePostEnabled, securedEnabled, jsr250Enabled proxyTargetClass등의 값 설정 가능

prePostEnabled

  • Spring Security의 pre/post 어노테이션 사용여부 설정
  • @PreAuthoirze
    • 어노테이션이 선언된 메서드 실행 전 권한 확인
  • @PostAuthoirze
    • 어노테이션 선언된 메서드 실행 후 권한 확인
  • Spring Expression Language를 이용하여 접근 제한 명시

Spring Expression Language(참고)

  • Expression Language(참고)
    • presentation layer(웹 페이지)와 application logic(빈에의해 관리되는)간의 커뮤니케이션에 사용
    • JSF(Java Server Faces)와 JSP(Java Server Pages)에 공통적으로 사용
    • JSF(참고)
      • 자바EE 기반 애플리케이션 개발함에 있어, UI를 개발하기 쉽게 하는 자바 기반 웹 어플리케이션 프레임워크
  • Spring Expression Language
    • 쿼리나 런타임에서의 Object graph 조작에 사용
      • Object graph(참고)
        • 한 개체가 다른 개체를 맴버변수로 참조하고 있고, 참조받고있는 개체가 다른 개체를 맴버변수로 참조하고 있는 형태
        • 이러한 형태가 그래프의 모습을 하고 있기 때문
    • 대부분의 문법은 일반적인 EL과 유사
    • 메서드 호출, 문자열 서식 기능 등 추가
    • Spring 프로젝트에 공통적인 EL을 제공하기위해 만들어졌음

secouredEnabled

  • @Secured 어노테이션 사용여부 설정
  • @Secured
    • @Secured("ROLE_ADMIN") == @PreAuthorize("hasRole('ROLE_ADMIN')")
    • @Secured({"ROLE_USER","ROLE_ADMIN") == @PreAuthorize("hasRole('ADMIN') OR hasRole('USER')")
    • pre/post 어노테이션보다 과거의 방법
      • Spring Security 2의 레거시
    • 롤 기반 접근 제한 명시
    • Spring Expression Language 사용 불가

jsr250Enabled

  • RoleAllowed 어노테이션 사용여부 설정
  • @RolesAllowed
    • JSR-250 자바 보안 표준 기반 어노테이션
    • 롤 기반 접근 제한 명시(@RolesAllowed({"ROLE_ADMIN"}))
    • pre/post 어노테이션보다 제한된 기능
    • Spring Security에 포함되어 있지 않다.

proxyTargetClass

  • 서브 클래스 기반 프록시 사용여부 설정

Spring AOP(참고)

  • Aspect Oritented Programming의 약자
  • 측면 / 양상 지향적인 프로그래밍
    • 여러 메서드에 동일한 기능을 하는 코드들이 있는경우
    • 중복되는 코드들을 분리하여, 각각의 메서드에 자신의 고유한 기능만 갖도록 하는것
  • 프록시 패턴
    • Spring AOP의 구현방식
    • 프록시 패턴을 통하여 기존의 코드를 변경하지 않고 기능을 추가할 수 있다.
    • Spring AOP의 대상인 클래스의 빈 생성시 프록시를 만들어 원본 대신 등록
  • AOP의 예
    • @Transactional
      • JDBC 트렌젝션 처리시 공통적으로 붙는 setAutoCommit() commit() rollback()코드를 추가

subclass-base proxy

  • 인터페이스가 없는 경우 프록시 생성 방법
  • 상속을 통해 프록시를 생성한다.
  • 단점
    • private 생성자만 있는 경우
    • final class인 경우
profile
42seoul cadet

0개의 댓글