인가
특정한 경로에 요청이 오면 Controller 클래스에 도달하기 전 필터에서 Spring Security가 검증을 한다.
- 해당 경로의 접근은 누구에게 열려 있는지
- 로그인이 완료된 사용자인지
- 해당되는 role을 가지고 있는지
Security Configuration
인가 설정을 진행하는 클래스
package com.gdy.springsecurity.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;
@Configuration //confinguration 컨테이너로 등록
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception{
http.authorizeHttpRequests((auth) -> auth
.requestMatchers("/", "/login").permitAll() //루트 경로에서 작업 진행
.requestMatchers("/admin").hasRole("ADMIN")
.requestMatchers("/my/**").hasAnyRole("ADMIN","USER")
.anyRequest().authenticated()//위에서 처리하지 못한 경로들 처리하는 메소드
);
return http.build();
}
}
HttpSecurity 설정
Spring Security의 각종 설정은 HttpSecurity로 대부분 하게 된다.
- 리소스(URL) 접근 권한 설정
- 인증 전체 흐름에 필요한 Login, Logout 페이지 인증 완료 후 페이지 인증 실패 시 이동페이지 등등 설정
- 인증 로직을 커스텀하기 위한 커스텀 필터 설정
- 기타 csrf, 강제 https 호출 등등 거의 모든 Spring Security의 설정을 담당
requestMatchers
requestMatchers("/", "/login"))
특정 리소스에 대해서 권한을 설정한다.
permitAll()
requestMatchers("/", "/login").permitAll()
모든 사용자에 대해 접근을 허용하는 데 사용된다.
보통은 특정한 리소스에 대해 인증을 요구하지 않을 때 사용된다.
hasAnyRole
requestMatchers("/admin").hasRole("ADMIN")
사용자가 여러 역할 중 하나 이상을 가지고 있는지 확인하는 데 사용된다.
hasRole
사용자가 특정 역할(role)을 가지고 있는지 확인하는 데 사용된다.
hasAuthority
사용자가 특정 권한(authority)을 가지고 있는지 확인하는 데 사용한다.
Role과 유사하지만, 권한은 더 세부적인 접근 권한을 나타낸다.
hasAnyAuthority
사용자가 여러 권한 중 하나 이상을 가지고 있는지 확인하는 데 사용된다.
authenticated
사용자가 인증되었는지 확인하는 데 사용된다.
anonymous
사용자가 익명 사용자(로그인되지 않은 사용자)인지 확인하는데 사용된다.
denyAll
모든 사용자에 대해 접근을 거부하는 데 사용된다.
fullAuthenticated
사용자가 완전히 인증되었는지 확인하는 데 사용된다.
ex) 2단계 인증을 통해 인증된 경우
'🌠Development > SpringBoot' 카테고리의 다른 글
[Spring Security] 05 - BCrypt 암호화 메서드 (0) | 2024.02.21 |
---|---|
[Spring Security] 04 - 커스텀 로그인 (0) | 2024.02.21 |
[Spring Security] 02 - 프로젝트 생성 (0) | 2024.02.19 |
[Spring Security] 01 - 목표 및 동작 원리 (0) | 2024.02.19 |
[Spring] Spring type - 스프링의 종류 (0) | 2024.02.19 |