@EnableGlobalMethodSecurity
@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 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인 경우