H2 데이터베이스를 사용하기 위해서 Spring Security에 몇 가지 설정을 해줘야합니다.
Spring Security에 별다른 설정을 하지 않는다면 기본 값으로 두 가지가 설정됩니다.
그래서, 우리는 H2에 접근하기 위해서는 CSRF라는 걸 비활성화해야 합니다.
스프링 시큐리티에서 웹 애플리케이션의 보안 필터 체인을 정의하고 관리하는 인터페이스입니다.
SecurityFilterchain을 사용해서 인증, 인가, 다양한 요청 패턴 또는 경로에 대한 보안 필터를 적용할 수 있습니다.
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를 비활성화 했습니다.
인증된 사용자의 권한을 이용하여 악의적인 요청을 실행하는 것을 의미합니다.