티스토리 뷰
728x90
Method 방식 - 개요
서비스 계층의 인가처리 방식
- 화면 메뉴 단위가 아닌 기능 단위로 인가처리
- 메소드 처리 전,후로 보안 검사 수행하여 인가처리
AOP 기반으로 동작
URL 방식은 Filter 기반이다. 사용자 요청을 Filter가 가로채서 자원에 대한 인가처리를 한다. AOP 기반과 Filter 기반은 내부동작의 차이가 있다.
- 프록시와 어드바이스로 메소드 인가처리 수행
보안 설정 방식
- 어노테이션 권한 설정 방식
- @PreAuthorize("hasRole("USER")"), @PostAuthorize("hasRole("USER")"), @Secured("ROLE_USER")
- 맵 기반 권한 설정 방식
- 맵 기반 방식으로 외부와 연동하여 메소드 보안 설정 구현
Method 방식 - 어노테이션 권한 설정
보안이 필요한 메소드에 설정
@PreAuthorize, @PostAuthorize
- SpEL 지원
- @PreAuthorize("hasRole('ROLE_USER') and (#account.username == principal.username)")
- PrePostAnnotationSecurityMetadataSource가 담당
@Secured, @RolesAllowed
- SpEL 미지원
- @Secured("ROLE_USER"), @RolesAllowed("ROLE_USER")
- SecuredAnnotationSecurityMetadataSource, Jsr250MethodSecurityMetadataSource가 담당
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
- 메소드 보안시 설정해야하는 어노테이션이다
코드
@GetMapping("/preAuthorize")
@PreAuthorize("hasRole('ROLE_USER') and #account.username == principal.username")
public String preAuthorize(AccountDto account, Model model, Principal principal){
model.addAttribute("method", "Success @PreAuthorize");
return "aop/method";
}
preAuthorize에 접근할 때 사용자는 ROLE_USER 라는 권한을 가져야하고 account로 전달되는 username과 인증을 받았을 때 인증된 사용자 정보를 principal로 참조할 수 있는데 그때 인증받은 사용자의 username과 같아야만 이 메소드에 접근할 수 있다.
Method 방식 주요 아키텍처
인가 처리를 위한 초기화 과정과 진행
초기화 과정
- 초기화 시 전체 빈을 검사하면서 보안이 설정된 메소드가 있는지 탐색
- 빈의 프록시 객체를 생성
- 보안 메소드에 인가처리(권한심사) 기능을 하는 Advice를 등록
- 빈 참조시 실제 빈이 아닌 프록시 빈 객체를 참조
진행과정
- 메소드 호출 시 프록시 객체를 통해 메소드를 호출
- Advice가 등록되어 있다면 Advice를 작동하게 하여 인가 처리
- 권한 심사 통과하면 실제 빈의 메소드를 호출한다.
참고
728x90
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- jQuery
- input
- Linux
- 북리뷰
- LocalDate
- config-location
- k8s
- mybatis config
- Java
- Bash tab
- docker
- mybatis
- maven
- JavaScript
- window
- Mac
- rocky
- 베리 심플
- Spring
- Spring Security
- 오라클
- svn
- intellij
- oracle
- elasticsearch
- LocalDateTime
- Kotlin
- Github Status
- localtime
- springboot
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함