새소식

반응형
Java/Spring Boot

Spring Security 정리하기 (#1 사용자 정의 보안 기능 구현)

  • -
728x90
반응형

아래 내용은 인프런 정수원님의 강의를 듣고 정리하는겸 적은 글입니다.

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 - 인프런 | 강의

초급에서 중.고급에 이르기까지 스프링 시큐리티의 기본 개념부터 API 사용법과 내부 아키텍처를 학습하게 되고 이를 바탕으로 실전 프로젝트를 완성해 나감으로써 스프링 시큐리티의 인증과

www.inflearn.com

 

 

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 Boot] Spring Security WebSecurityConfigurerAdapter Deprecated 로 인해 Security 설정 바꿔보기

Spring Security 로 로그인 구현 하다보니 WebSecurityConfigurerAdapter 가 Deprecated 되어 있는걸 확인했다. 평소에 로그인 구현했던 방법은 WebSecurityConfigurerAdapter 를 상속받아 configure 메소드들을 오버라이드

okimaru.tistory.com

 

위 내용 참고해주세요.

 

 

일단 기본적인 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 인증 방식을 사용한다.

 

 

728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.