728x90
✍️ 학습 목표
- 의존성 추가
- 사용자 설정
- 권한 설정과 표현
📌 의존성 추가하기
🧷 Maven project - pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
🧷 Gradle project - build.gradle
implementation 'org.springframework.boot:spring-boot-starter-security'
스프링 시큐리티의 의존성을 추가하면 다음과 같은 기능을 사용할 수 있다.
- 서버가 가동되면 스프링 시큐리티 초기화 작업과 웹 보안 설정이 이루어진다.
- 모든 요청이 인증되어야 자원에 접근할 수 있다.
- 인증 방식은 폼 로그인 방식과 httpBasic 로그인 방식을 제공한다.
- 기본 로그인·로그아웃 페이지(+기본 계정)를 제공한다.
📌 사용자 정의 시큐리티 설정
의존성을 추가한 이후 SecurityConfig 설정 클래스를 만들어 추가적인 설정이 가능하다.
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests((authz) -> authz
.anyRequest().authenticated()
)
.httpBasic(withDefaults());
return http.build();
}
}
22년부터 보안 설정이 변경되어 이전에 사용하던 WebSecurityConfigureAdapter를 상속한 뒤 configure 메서드를 오버라이딩하는 방식을 사용할 수 없게 되었다.
앞으로는 SecurityFilterChain을 빈으로 등록하는 방식을 사용해야 한다.
📌 권한 설정과 표현식
두 가지 방식으로 권한 설정을 할 수 있다.
🧷 선언적 방식
- URL : http.antMatchers("/user/**").hasRole("ROLE_USER")
- 메서드 : @PreAuthorize("hasRole('ROLE_USER')")
🧷 동적 방식 - DB 연동 프로그래밍
- URL
- 메서드
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/user/**").authenticated()
.antMatchers("/manager/**").access("hasAnyRole('ROLE_MANAGER','ROLE_ADMIN')")
.antMatchers("/admin/**").access("hasRole('ROLE_ADMIN')")
.anyRequest().permitAll();
return http.build();
}
Authorize 순서는 정말 중요하다! 항상 좁은 범위에서 넓은 범위 순으로 설정돼야 한다.
🧷 표현식
access(String ...) | 표현식 결과에 따라 접근 허용 |
hasRole(String ...) | 해당 역할을 가지고 있다면 접근 허용 |
hasAnyRole(String ..., String ...) | 해당 역할 중 하나라도 가지고 있다면 접근 허용 |
hasAuthority(String ...) | 해당 권한을 가지고 있다면 접근 허용 |
hasAnyAuthority(String ..., String ...) | 해당 권한 중 하나라도 가지고 있다면 접근 허용 |
hasIpAddress(String ...) | 주어진 IP로부터 요청이 왔다면 접근 허용 |
anonymous() | 익명사용자의 접근 허용 |
rememberMe() | rememberMe 인증을 통해 인증된 사용자의 접근 허용 |
authenticated() | 인증된 사용자의 접근 허용 |
fullyAuthenticated() | 인증된 사용자의 접근 허용, rememberMe 인증 제외 |
permitAll() | 무조건 접근 허용 |
denyAll() | 무조건 접근 불가 |
-Reference
https://docs.spring.io/spring-security/site/docs/5.4.2/reference/html5
'Web > Spring-Security' 카테고리의 다른 글
[Security] 시큐리티 파헤치기 (4) : 인증이란? (feat. Authentication) (1) | 2023.08.17 |
---|---|
[Security] 시큐리티 파헤치기 (3) : 시큐리티 초기화, 다중 필터 체인 (0) | 2023.08.11 |
[Security] 시큐리티 파헤치기 (2) : RequestCacheAwareFilter, RequestCache (2) | 2023.08.02 |
[Security] 시큐리티 파헤치기 (1) : DelegatingFilterProxy (0) | 2023.08.02 |
[Security] Spring Security (1) (0) | 2022.10.05 |
댓글