기본적으로 모든 URL에 대한 액세스를 거부하는 방법은 무엇입니까?
새 스프링 부트 REST 리소스를 정의할 때 URL 패턴에 대한 스프링 보안 구성도 만드는 것을 잊어버리는 경우가 많습니다.
기본적으로 모든 URL에 대한 액세스를 거부하고 명시적으로 구성된 URL 패턴에 대한 액세스만 허용하려면 어떻게 해야 합니까?.hasRole액세스를 허용하기 위해) 의도하지 않은 보안 취약점을 최대한 피하고 싶습니다.
세 가지 REST 리소스가 있다고 가정해 보겠습니다./jobs,/desks그리고./salary현재 코드는 다음과 같습니다.
http.authorizeRequests()
.antMatchers(HttpMethod.GET, "/jobs")
.hasRole("my_user")
.antMatchers(HttpMethod.GET, "/desks")
.hasRole("my_user");
그러나 현재 url에 대한 액세스./salary(아직 구성되지 않았기 때문에) 모든 사용자에게 제공됩니다!
Spring의 표현 기반 액세스 제어에는denyAll항상 로 평가되는 표현false.
그래서 당신이 할 수 있는 것은 이것을 사용하는 것입니다.denyAll모든 것에 대한 액세스를 거부하고 다음을 통해 특정 URL에 대한 액세스를 허용하는 방법hasRole:
http.authorizeRequests().antMatchers("/admin/**").access("hasRole('ADMIN')").antMatchers("/**").denyAll();
예를 들어, 관리자 권한을 가진 사용자는 다음으로 시작하는 모든 페이지에 액세스할 수 있습니다./admin그러면 다른 모든 페이지에 대한 액세스가 거부됩니다.주문은 입력하는 것처럼 중요합니다..antMatchers("/**").denyAll() 먼저, 모든 액세스를 거부하고 나머지 표현식을 무시합니다.
대신에, 당신은permitAll()특정 URL 패턴의 경우:
http.authorizeRequests().antMatchers("/users/**").permitAll().antMatchers("/**").denyAll();
로그인 방법에 대한 액세스를 허용해야 할 수도 있습니다. 그러면 시스템은 특정 역할로 다른 사용자가 로그인하도록 허용하고, 이를 모두 함께 결합하여 모든 사용자가 로그인을 시도할 수 있습니다. 관리자 사용자만 관리 페이지에 액세스하고 다른 사용자는 모두 거부할 수 있습니다.
http.authorizeRequests().antMatchers("/login").permitAll().antMatchers("/admin/**").access("hasRole('ADMIN')").antMatchers("/**").denyAll();
다음을 사용하여 기본적으로 모든 요청을 거부할 수 있습니다..anyRequest().denyAll()및 명시적 허용 요청:.hasRole
anyRequest().denyAll()기본적으로 모든 요청을 거부합니다..hasRole요청을 명시적으로 허용하다
언급URL : https://stackoverflow.com/questions/51385335/how-to-deny-access-to-all-urls-by-default
'programing' 카테고리의 다른 글
| 오류 - ORA-22835: 버퍼가 너무 작아서 CLOB에서 CHAR 또는 BLOB에서 RAW로 변환할 수 없습니다. (0) | 2023.07.02 |
|---|---|
| Oracle에 CASE 문이 있는 조건부 WHERE 절 (0) | 2023.07.02 |
| 지원되지 않는 키워드:메타데이터 (0) | 2023.07.02 |
| 깃 저장소에 여러 프로젝트를 넣을 수 있는 방법이 있습니까? (0) | 2023.07.02 |
| 빈도/값을 기준으로 이산형 x 척도 정렬 (0) | 2023.07.02 |