일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |
- 리스트
- 도커
- 자바
- 알고리즘
- java
- 쓰레드
- 동시성
- Thread
- 시작하세요! 도커 & 쿠버네티스
- 멀티 쓰레드
- contatiner
- 스레드 제어와 생명 주기
- 스레드
- container
- LIST
- 제네릭스
- 시작하세요 도커 & 쿠버네티스
- 중급자바
- 실전 자바 중급 2편
- Collection
- 오케스트레이션
- 김영한
- 실전 자바 고급 1편
- 자료구조
- 쿠버네티스
- Kubernetes
- 컨테이너
- 도커 엔진
- Docker
- 인프런
- Today
- Total
쌩로그
인가 API - 권한 설정 및 표현식 본문
나는 어차피 잘 될 사람이다.
어차피 잘 될 것이고, 지금도 잘 되고있고, 과거도 잘 되어왔기에,,,
목차
- 개요
- 본론
2-1. URL별 접근 권한 설정
2-2. 인가 API 표현식 - 요약
- 끝.
1. 개요
제곧내 인가 즉, 권한 설정의 API와 그와 관련된 표현식에 관한 포스팅이다.
해당 내용은 나의 시큐리티 학습 레포에 있다.
먼저 권한 설정 방식에는 두가지 방식이 있다.선언적 방식
과 동적 방식(DB를 연동한 방식)
이다. 그리고 각 방식 마다 URL 혹은 메서드로 설정할 수 있다.
간략히 하면 아래와 같다.
- 선언적 방식
- URL
- Method
- 동적 방식 - DB 연동 프로그래밍
- URL
- Method
이 중, 선언적 방식 중 URL방식에 대한 내용이다.
2. 본론
2-1. URL별 접근 권한 설정
해당 방식은 configure메서드를 Override한 configure(HttpSecurity http) 메서드
에서 설정할 수 있다.
참고로, 지금은 WebSecurityConfigurerAdapter가 Deprecated됨;;
antMatcher("URL경로")
로 보통 전체경로를 설정해준다.authorizeRequests()
를 선언한 이후, .antMatcher("URL경로")
로 methodChain형식으로 URL 경로를 설정해준다.
그리고 antMatcher("URL경로")를 선언
하고, `.허용된 권한을 설정해준다.(예 permitAll(), hasRole("ADMIN")... 등)
아래 코드를 참고하면 될 거 같다.
Ex)
http
.antMatcher("URL경로")
.authorizeRequests()
.antMatcher("URL경로").hasRole("ADMIN") // 해당 경로에는 ADMIN권한을 가진 계정만 접근가능
.antMatcher("URL경로").permitAll(); // 모든 권한을 가진 계정 접근가능.
❗주의 사항
- 구체적인 경로를 먼저 설정해주고, 밑으로 갈수록 범위가 넓어져야 한다.
- 범위가 넓은 것을 우선 설정하고, 구체적인 경로를 이후로 선언할 때 발생하는 문제는 좁은 범위로 설정 된 경로로 권한을 체크하기 전에 넓은 범위의 경로에서 필터링되므로, 좁은 범위의 경로로 체킹되기 전에 넓은 범위에서 이미 허용된 권한으로 체킹되므로 특정 경로에 특정 권한만 접근가능하도록 설정했지만, 무용지물이 되기 때문이다.
예를 들면,
아래와 같이 permitAll()
로 모든 경로를 설정한 이후, ADMIN
만 허용가능한 특정 경로를 설정했다고 가정했을때,
authorizeRequests()
.antMatcher("/shop/**).permitAll()
.antMatcher("/shop/admin).hasRole("ADMIN")
ADMIN의 권한이 아닌 유저라도 .antMatcher("/shop/**).permitAll()
에 체킹되서 /shop/admin
에 접근이 가능하다는 것이다.
2-2. 인가 API 표현식
메소드 | 동작 |
---|---|
authenticated() | 인증된 사용자의 접근을 허용 |
fullyAuthenticated() | 인증된 사요자의 접근을 허용, rememberMe 인증 제외 |
permitAll() | 무조건 접근을 허용 |
denyAll() | 무조건 접근을 허용하지 않음 |
anonymous() | 익명 사용자의 접근을 허용, 단 USER는 접근을 못함. permitAll()로 설정하는 것이 더 나은 선택 |
rememberMe() | 기억하기를 통해 인증된 사용자의 접근을 허용 |
access(String) | 주어진 SpEL 표현식의 평가 결과가 true이면 접근을 허용 |
hasRole(String) | 사용자가 주어진 역할(USER ,ADMIN)이 있다면 접근을 허용 |
hasAuthority(String) | 사용자가 주어진 권한(ROLE_USER, ROLE_ADMIN)이 있다면 접근을 허용 |
hasAnyRole(String...) | 사용자가 주어진 권한 중 어떤 것이라도 있다면 접근을 허용 |
hasAnyAuthority(String...) | 사용자가 주어진 권한 중 어떤 것이라도 있다면 접근을 허용 |
hasIpAddress(String) | 주어진 IP로부터 요청이 왔다면 접근을 허용 |
3. 요약
권한 설정 방식에는 두가지 방식 선언적 방식
과 동적 방식
이 있다.
두 방식에는 각각 URL방식
과 메서드방식
이 있는데, 그 중 선언적 방식-URL방식을 알아보았다.
그리고, 인가 API 표현식에 대한 내용도 참고해보았다.
4. 끝
끝.
'Spring Project > Spring Security' 카테고리의 다른 글
사이트 간 요청 위조 - CSRF, CsrfFilter (0) | 2023.05.17 |
---|---|
예외 처리 및 요청 캐시 필터 (0) | 2023.05.17 |
세션 제어 필터 (1) | 2023.05.17 |
익명사용자 인증필터, 동시세션제어, 세션 고정 보호, 세션 정책 (0) | 2023.05.12 |
Spring Security Form 로그인, Remember Me (2) | 2023.05.12 |