아래 내용은 인프런 정수원님의 강의를 듣고 정리하는겸 적은 글입니다.
https://www.inflearn.com/course/%EC%BD%94%EC%96%B4-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%8B%9C%ED%81%90%EB%A6%AC%ED%8B%B0
Spring Boot 에서 Spring Security 를 사용하기 위해 아래와 같이 pom.xml에 의존성을 추가한다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
의존성을 추가한 후 maven > maven update 를 통해 의존성 라이브러리를 다운받는다.
프로젝트를 시작하게 되면 Spring Boot 프로젝트는 Spring Security로 인해 보안이 적용된 프로젝트로 바뀐다.
아무 설정없이 Conroller에 적용된 mapping 으로 접근해보면 Spring Security에서 기본적으로 제공하는
로그인 화면으로 이동한다. 기본적으로 인증된 사용자만 접근할 수 있도록 보안설정이 된 것이다.
Spring Security 의존성을 추가했을 때 일어나는 일
- 서버가 기동되면 Spring Security의 초기화 작업 및 보안 설정이 이루어진다.
- 별도의 설정이나 구현을 하지 않아도 Spring Security 에서 제공해주는 기본 로그인 페이지로 이동한다.
- 모든 요청에 대해서 인증이 되어야 자원에 접근이 가능하다.
- 인증 방식은 Form Login 방식과 HttpBasic 로그인 방식을 제공한다.
- 기본 로그인 페이지를 제공한다.
- 기본 계정 한개를 제공한다(username : user, password: 랜덤 문자열)
Spring Security 의 초기화 작업 및 보안설정을 하는 핵심적인 클래스는 WebSecurityConfigurerAdapter 이다.
WebSecurityConfigurerAdapter
Spring Security 의 웹 보안 기능을 초기화하고 설정을 하는 핵심적인 클래스
위 핵심적인 클래스는 세부적인 보안기능을 설정하는 HttpSecurity 클래스를 생성한다.
아래와 같이 클래스를 살펴보자
HttpSecurity 를 생성하고 applyDefaultConfiguration 을 통해 HttpSecurity 객체를 넘겨 초기 설정을 진행한다.
그다음 configure(this.http); 를 통해서 초기작업을 진행한다.
.authorizeRequests() : 보안 검사를 진행한다.
.anyRequest() : 어떠한 요청에도
.authenticated() : 인증을 받도록 설정한다.
.formLogin() : 인증은 Form Login 방식으로 진행한다.
HttpSecurity
HttpSecurity 클래스는 Spring Security의 세부적인 보안기능을 설정할 수 있는 API를 제공한다.
인증을 제공하는 API 와 인가 API가 있다.
- 인증 API
- .formLogin()
- .logout()
- .csrf()
- .httpBasic()
- .SessionManagement() 등...
- 인가 API
- .antMatchers()
- .hasRole()
- .permitAll()
- .authenticated() 등...
버전이 높아지면서 Spring Security 설정법이 바꼈다. WebSecurityConfigurerAdapter 클래스는 Deprecated 됐다.
https://okimaru.tistory.com/295
위 내용 참고해주세요.
일단 기본적인 Spring Security 설정을 해보자
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest()
.authenticated()
.and()
.formLogin();
}
}
@Configuration
해당 클래스는 Spring Bean 클래스임을 명시하는 어노테이션이다.
해당 어노테이션이 있을 경우 서버 구동 시 Spring 컨테이너에 Bean 등록이 된다.
@EnableWebSecurity
웹 보안을 활성화 시키기 위한 어노테이션
아래 이미지를 보면 EnableWebSecurity 어노테이션은 여러가지의 클래스들을 import 하여 실행시킨다.
public class SecurityConfig extends WebSecurityConfigurerAdapter {}
Spring Security의 초기화 작업 및 보안설정을 하는 핵심적인 클래스인 WebSecurityConfigurerAdapter를
상속받아 구현해본다.
@Override
protected void configure(HttpSecurity http) throws Exception {
HttpSecurity 를 통해 세부적인 보안설정을 하기 위해 Override 한다.
http
.authorizeRequests() : 보안 검사를 진행한다.
.anyRequest() : 어떠한 요청에도
.authenticated() : 인증을 받도록 설정한다.
.and()
.formLogin(); : Form Login 인증 방식을 사용한다.