사용자 정의 보안 구성

정민교·2024년 7월 12일
0

spring security

목록 보기
5/13
post-thumbnail

📒목표

spring security의 자동 설정에 의한 기본 보안 말고 우리가 정의한 SecurityFilterChain을 통해 보안 기능 적용해보기

📒사용자 정의 보안 기능 구현

사용자 정의 보안을 적용하기 위해서는 SecurityFilterChain 타입 객체를 정의한 후 인증 및 인가 API를 설정하고 빈으로 등록해야 한다.

그래야 자동 설정에 의한 SecurityFilterChain 빈이 생성되지 않고 우리가 생성한 빈을 통해 보안 기능을 적용한다.

앞서 살펴본 것처럼 SecurityFilterChainRequestMatcherFilter들을 가지고 있다.

기본 User 설정

처음에 우리는 spring security가 인증을 위해 기본으로 제공해주는 유저 정보를 확인한 적 있다.

SecurityProperties클래스와 UserDetailsManager클래스를 통해서 기본 유저 정보를 제공받았는데,

유저 정보를 application.yml 파일이나 자바 설정 클래스로 직접 정의할 수도 있다.

application.yml

  security:
    user:
      name: user
      password: 1111
      roles: USER

설정 클래스에 bean으로 등록

    @Bean
    public UserDetailsService userDetailsService() {
        UserDetails userDetails1 = User.withUsername("user")
                .password("{noop}1111")
                .roles("USER").build();
        UserDetails userDetails2 = User.withUsername("user2")
                .password("{noop}2222")
                .roles("USER").build();
        return new InMemoryUserDetailsManager(userDetails1, userDetails2);
    }

두 방식 모두 설정한 경우 설정 클래스에 작성한 정보가 우선시 된다.

✔️SecurityFilterChain 빈 등록

SecurityFilterChain 타입 빈을 등록하기 위한 설정 클래스에 @EnableWebSecurity 어노테이션을 달아주어야 한다.

그리고 모든 설정 클래스를 등록하는 부분은 모두 람다 형식으로 작성해야 한다.

import static org.springframework.security.config.Customizer.*;

@EnableWebSecurity
@Configuration
public class SecurityConfig {
    @Bean
    SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
                .authorizeHttpRequests(
                        auth -> auth.anyRequest().authenticated() //모든 요청은 인증을 받은 상태에서만 가능하도록 설정
                )
                .formLogin(withDefaults()); //인증을 위해 formLogin 방식을 사용하고 기본 설정으로 하겠다.
        return http.build();
    }
}

이렇게 작성하고 웹 애플리케이션을 실행하면 웹 애플리케이션에 우리가 설정한 보안 기능이 적용된다.

profile
백엔드 개발자

0개의 댓글