인가 API - 권한 설정
- 선언적 방식
- URL
- http.antMatchers("/users/**")/hasRole("USER")
- Method
- @PreAuthorize("hasRole("USER")")
public void user() {System.out.println("user")}
- @PreAuthorize("hasRole("USER")")
- URL
- 동적 방식 - DB 연동 프로그래밍
- URL
- Method
선언적 방식 - URL
- url 자체를 선언하여 접근 권한을 조정하는 방식
- 설정 시 구체적인 경로가 먼저오고 그것 보다 큰범위의 경로가 뒤에 오도록 하여야 한다.
- 각 메소드에 대한 내용은 아래 같다.
- .authorizeRequests() : 모든 경로에 보 요청되는 메소드를 선언
- .antMatchers("/","/users","user/login/**", "/login*").permitAll() : 해당 url에 접근시에는 권한없이 접근이 가능함.
- .antMatchers("/mypage").hasRole("USER") : user권한이 있어야 접근이 가능함.
- .antMatchers("/messages").hasRole("MANAGER") : manager 권한이 있어야 접근이 가능함.
- .antMatchers("/config").hasRole("ADMIN") : admin 권한이 있어야 접근이 가능함.
- .anyRequest().authenticated() : 나머지 요청들은 인증된 사용자만 접근이 가능토록함.
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/","/users","user/login/**", "/login*").permitAll()
.antMatchers("/mypage").hasRole("USER")
.antMatchers("/messages").hasRole("MANAGER")
.antMatchers("/config").hasRole("ADMIN")
.anyRequest().authenticated()
}
URL 표현식의 종류
메소드 | 동작 |
authenticated() | 인증된 사용자의 접근을 허용 |
fullyAuthenticated() | 인증된 사용자의 접근을 허용, rememberMe 인증 제외 (오로지 폼인증만으로 접근 가능함) |
permitAll() | 무조건 접근을 허용 |
denyAll() | 무조건 접근을 허용하지 않음 |
anonymous() | 익명사용자의 접근을 허용 (반대로 권한이 있는 사람은 접근 불가함) |
rememberMe() | 기억하기를 통해 인증된 사용자의 접근을 허용 |
access(String) | 주어진 SpEL 표현식의 평가 결과가 true이면 접근을 허용 |
hasRole(String) | 사용자가 주어진 역할이 있다면 접근을 허용 |
hasAuthority(String) |
사용자가 주어진 권한이 있다면 접근을 허용 (hasRole과는 차이가 없음) |
hasAnyRole(String...) | 사용자가 주어진 권한이 있다면 접근을 허용 |
hasAnyAuthority(String...) |
사용자가 주어진 권한 중 어떤 것이라도 있다면 접근을 허용 |
hasIpAddress(String) | 주어진 IP로부터 요청이 왔다면 접근을 허용 |
'Backend > Security' 카테고리의 다른 글
CSRF(사이트 간 요청 위조) (0) | 2023.01.09 |
---|---|
ExceptionTranslationFilter (0) | 2023.01.09 |
SessionManagementFilter, ConcurrentSessionFilter (0) | 2023.01.03 |
동시 세션 제어 (0) | 2023.01.03 |
AnonymousAuthenticationFilter (0) | 2023.01.03 |