이번 스프링 시큐리티를 공부하며 느낀 것인데 스프링 시큐리티 라는 프레임워크는 방대하고 디버깅, 내부 코드를 들여다보지 않는다면 이해하기가 쉽지 않다는 생각이 들었다.
따라서 공부의 깊이는 아래의 요구사항을 만족하는 코드를 작성하는 데 문제가 없을 정도로 할 생각이다. 너무 방대한 프레임워크이기도 하고 앞으로 내가 서비스를 개발 하며 로그인을 직접 구현하는 일은 없을 것 같아(대부분의 서비스는 이미 개발되어 있는 기능 이라고 생각) 목표 설정을 아래와 같이 잡았다.
1. 새롭게 변경된 스프링 시큐리티 버전 6.1 코드
2. 스프링 세션과의 통합
3. 토큰 기반 사용자 인증
4. OAuth 인증
스프링 시큐리티란?
강력하고 커스터마이징 가능한 인증, 인가처리 프레임워크
스프링 베이스 어플리케이션의 사실상 표준이다.
스프링 세션과도 통합이 가능 -> 지금 다루지 않을거임
OAuth 인증 프로토콜도 제공 -> 이것도 나중에 다룰게요
인증이란 무엇일까?
사용자가 사용자 본인이 맞는지 확인하는 과정
위 과정을 어떻게 할까요?
대부분의 웹어플리케이션은 로그인을 통해 인증을 수행한다. 근데 지문 인식, 얼굴 인식, 디지털 인증서 등의 방법도 가능
인가란 무엇일까?
인증된 사용자가 특정 리소스에 접근하거나 특정 작업을 수행할 권한이 있는지 확인하는 과정
인가처리를 어떻게 할까요?
사용자의 권한, 역할, 규칙 등을 기반으로 결정이 된다. 예를 들면 특정 사용자는 읽기 작업만 가능하고 특정 사용자는 쓰기 작업까지 가능하다.
코드
@Configuration
@EnableWebSecurity// 생략 가능
public class WebSecurityConfig {
@Bean
SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests((authorize) -> authorize
.requestMatchers("/assets/**").permitAll() // 정적 자원에 대한 접근 처리
.requestMatchers("/me").hasAnyRole("USER", "ADMIN"))//특정 리소스에 접근하려면 권한 필요(인가처리)
.formLogin((formLogin) -> formLogin
.defaultSuccessUrl("/")
.permitAll()); //인가 처리를 하기 위해서는 클라이언트가 본인을인증해야 함 -> 로그인을 통해 구현
return http.build();
}// 이것도 마찬가지로 변경 됏음. 과거 사용했던 메소드 밑에 현재 버전에 맞는 메소드가 있음.
}
시큐리티 사용자 추가하는 yaml
spring:
security:
user:
name: user
password: 1234
roles: USER
여러 사용자를 추가하는 코드1
여러 사용자를 추가하는 코드2
securityFilterChain안에 아래의 코드 작성
'Spring' 카테고리의 다른 글
Servlet과 Spring MVC (0) | 2023.03.06 |
---|---|
AOP의 개념 (0) | 2023.02.05 |
Spring vs Spring boot (0) | 2022.11.09 |
Maven & Gradle (0) | 2022.11.08 |
BeanFactory & ApplicationContext (0) | 2022.11.08 |