반응형
클래스 생성
공식 문서를 확인해보니 Spring Security 5.7.0-M2버전 부터 WebSecurityConfigurerAdapter가 deprecated되었다고 한다.
(공식 문서 : https://spring.io/blog/2022/02/21/spring-security-without-the-websecurityconfigureradapter)
위 링크 안에 deprecated에 대해 대처하는 방법도 있으니 참고 하기 바람.
이 글에서는 Spring Security 6.0 이후 버전을 사용하기 때문에 이후 버전으로 세팅하는 법을 작성하려고 한다.
config Class
import static org.springframework.security.config.Customizer.withDefaults;
import javax.sql.DataSource;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityCustomizer;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.jdbc.JdbcDaoImpl;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.security.provisioning.JdbcUserDetailsManager;
import org.springframework.security.provisioning.UserDetailsManager;
import org.springframework.security.web.SecurityFilterChain;
@RequiredArgsConstructor
@Configuration
public class SpringSecurityConfig {
// HttpSecurity를 통해 HTTP보안 설정 구성
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests((authz) -> authz
.anyRequest().authenticated()
)
.httpBasic(withDefaults());
return http.build();
}
// 예외 처리할 요청(요청을 무시하는 경우 HttpSecurity.authorizeHttpRequests를 통해 prmitAll주는 것을 권장)
@Bean
public WebSecurityCustomizer webSecurityCustomizer() {
return (web) -> web.ignoring().requestMatchers("/ignore1", "/ignore2");
}
// JDBC 인증
@Bean
public DataSource dataSource() {
return new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.H2)
.addScript(JdbcDaoImpl.DEFAULT_USER_SCHEMA_DDL_LOCATION)
.build();
}
@Bean
public UserDetailsManager users(DataSource dataSource) {
UserDetails user = User.withDefaultPasswordEncoder() // 실제로는 hashing하여 사용을 권장
.username("user")
.password("password")
.roles("USER")
.build();
JdbcUserDetailsManager users = new JdbcUserDetailsManager(dataSource);
users.createUser(user);
return users;
}
// In-Memory 사용자 인증
@Bean
public InMemoryUserDetailsManager userDetailsService() {
UserDetails user = User.withDefaultPasswordEncoder() // 실제로는 hashing하여 사용을 권장
.username("user")
.password("password")
.roles("USER")
.build();
return new InMemoryUserDetailsManager(user);
}
}
하나하나 뜯어보기
+ ) antMatchers가 동작하지 않는 이유
spring-security 5.8 이상의 버전을 사용하는 경우에는 antMatchers, mvcMatchers, regexMatchers가 더 이상 사용되지 않기 때문에, requestMatchers를 사용해야 함
반응형
'Backend > Spring | SpringBoot' 카테고리의 다른 글
[Spring Security] Survlet 기반 Application 아키텍쳐(2) (0) | 2024.03.19 |
---|---|
[Spring Security] Survlet 기반 Application 아키텍쳐(1) (0) | 2024.03.19 |
[Spring Security] Spring Security 적용 (0) | 2024.03.15 |
[Spring] @RequestBody (0) | 2024.03.14 |
[Spring] MessageSource를 이용한 Exception처리 (0) | 2024.03.14 |