H2 콘솔을 사용하기 위해 Spring Security 설정하기

Soo·2024년 3월 16일

H2 데이터베이스를 사용하기 위해서 Spring Security에 몇 가지 설정을 해줘야합니다.

Spring Security에 별다른 설정을 하지 않는다면 기본 값으로 두 가지가 설정됩니다.

  1. 모든 URL이 보호됩니다.
  2. 승인되지 않은 요청에 대해서는 로그인 양식이 표시됩니다.

그래서, 우리는 H2에 접근하기 위해서는 CSRF라는 걸 비활성화해야 합니다.

SecurityFilterchain

스프링 시큐리티에서 웹 애플리케이션의 보안 필터 체인을 정의하고 관리하는 인터페이스입니다.

SecurityFilterchain을 사용해서 인증, 인가, 다양한 요청 패턴 또는 경로에 대한 보안 필터를 적용할 수 있습니다.

SpringSecurityConfiguration.class

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.security.web.SecurityFilterChain;

import java.util.function.Function;

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

@Configuration
public class SpringSecurityConfiguration {

    @Bean
    public InMemoryUserDetailsManager createUserDetailsManager() {

        UserDetails userDetails1 = createNewUser("tester1", "testpassword1");
        UserDetails userDetails2 = createNewUser("tester2", "testpassword2");

        return new InMemoryUserDetailsManager(userDetails1, userDetails2);
    }

    private UserDetails createNewUser(String username, String password) {
        Function<String, String> passwordEncoder
                = input -> passwordEncoder().encode(input);
        UserDetails userDetails = User.builder()
                .passwordEncoder(passwordEncoder)
                .username(username)
                .password(password)
                .roles("USER", "ADMIN")
                .build();
        return userDetails;
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http.authorizeHttpRequests(
                auth -> auth.anyRequest().authenticated());
        http.formLogin(withDefaults());

        http.csrf().disable();
        http.headers().frameOptions().disable();
        return http.build();
    }
}

SecurityFilterChain을 사용해서 모든 요청을 허용하고 csrf를 비활성화 했습니다.

CSRF

인증된 사용자의 권한을 이용하여 악의적인 요청을 실행하는 것을 의미합니다.

0개의 댓글