사용자 정의 보안 기능 구현
한 개 이상의 SecurityFilterChain 타입의 빈을 정의한 후 인증 API 및 인가 API를 설정할 수 있다.
@EnableWebSecurity 애노테이션을 선언하면 스프링 부트에 의해 해당 빈이 등록되게 된다.
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
//... 커스터마이징 인증 API 및 인가 API}
}
그 뒤에 SecurityFilterChain을 반환하는 코드를 작성해주면 되는데, 이 때 HttpSecuriy를 파라미터로 의존성 주입을 통해 받아서, 여러가지 인증 API 및 인가 API를 커스터마이징 할 수 있다.
SecuriyFilterChain을 직접 정의하게 되면 자동 설정에 의한 SecurityFilterChain빈은 생성되지 않고 앞으로 사용자가 정의한 SecurityFilter들이 등록될 것이다.
사용자 추가 설정
스프링 시큐리티를 의존성 주입을 통해 받고나서 애플리케이션을 가동하고 나면 자동으로 생성되는 Password를 볼 수 있을 것이다.
해당 기능 또한 커스터마이징을 통해서 정의할 수 있가 있는데 방법은 총 2가지 정도 있다.
application.properties or yml
자바 설정 클래스에 Bean 등록
@Bean
public UserDetailsService inMemoryUserDetailsManager() {
UserDetails user = User.withUsername("study")
.password("{noop}1234")
.roles("USER")
.build();
return new InMemoryUserDetailsManager(user);
}
둘 중 하나의 기능을 통해 앞으로 애플리케이션을 띄울때 마다 랜덤으로 생성된 Password를 복붙하지 않아도 된다.
해당 과정은 스프링 부트의 자동 구성 정보에 포함되어있는 SecurityProperties가 초기화 되면서 InnerClass로 User 클래스를 가지고 있고, User 클래스의 name과 password 필드의 데이터를 사용하는 곳이 InMemoryUserDetailsManager이기 때문에 해당 정보를 커스터마이징 할 수 있는 것이다.
'스프링 > Security6.x' 카테고리의 다른 글
[Security6.x] 인증 프로세스(formLogin) (0) | 2024.12.21 |
---|---|
[Security6.x] 초기화 과정 (0) | 2024.12.13 |