728x90
수업 중 진행한 Config를 기준으로 Spring Security 설정 관련된 체인들을 설명하는 글입니다.
과정
- configuration 패키지 생성
- SecurityConfig 클래스 생성
- 어노테이션 추가
- @EnableWebSecurity
- @Configuration
- SecurityFilterChain 추가
- 추가하지 않을 경우 deny 401 에러 발생
- @Bean 추가
- 어노테이션 추가
- EncrypterConfig 클래스 생성
- 어노테이션 추가
- @Configuration
- BCryptPasswordEncoder
- SecurityConfig에 생성하지 말 것.
- @Bean 추가
- 어노테이션 추가
- SecurityConfig 클래스 생성
SecurityConfig.class
Spring Security 설정을 검색해보면, WebSecurityConfigurerAdapter을 상속받아 설정을 진행하는 게시글이 많다.
Deprecated.
Use a SecurityFilterChain Bean to configure HttpSecurity or a WebSecurityCustomizer Bean to configure WebSecurity
https://docs.spring.io/spring-security/site/docs/5.7.0-M2/api/org/springframework/security/config/annotation/web/configuration/WebSecurityConfigurerAdapter.html
공식 문서를 보면 WebSecurityConfigurerAdapter가 @Deprecated 되었고, 상속받아 활용했던 방법 대신 Bean을 등록해서 사용할 것을 권장하고 있다.
@EnableWebSecurity
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity) throws Exception {
return httpSecurity
.httpBasic().disable()
.csrf().disable()
.cors().and()
.authorizeRequests()
.antMatchers("/api/**").permitAll() // /api/**로 들어오는 것은 전체 허용
.antMatchers("/api/v1/users/join", "/api/v1/users/login").permitAll() // join, login은 언제나 가능
.and()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS) // (STATELESS) jwt사용하는 경우 토큰을 넣어서 확인하기 때문에 씀 (프론트에서 토큰을 넣어서 확인할 수 있기 때문)
.and()
//.addFilterBefore(new JwtTokenFilter(userService, secretKey), UsernamePasswordAuthenticationFilter.class) //UserNamePasswordAuthenticationFilter적용하기 전에 JWTTokenFilter를 적용 하라는 뜻 입니다.
.build();
}
}
- .httpBasic(): HTTP 기본 인증 구성
- .csrf(): CSRF 보호 활성화한다. EnableWebSecurity의 기본생성자를 사용할 때 기본적으로 활성화, .disable()을 사용하여 비활성화 가능
- .cors(): CorsFilter를 사용한다.
- .and(): SecurityConfigurer의 사용이 끝나면 SecurityBuilder를 반환. method chaining에 유용
- .authorizeRequests(): HttpServletRequest를 사용하여 RequestMatcher를 구현, request 인증.
- @Deprecated 되었다.
- .authorizeHttpRequests()의 사용을 권장한다.
- .antMatchers: 경로 지정, httpmethod가 무엇을 사용해도 상관하지 않는 AntPathRequestMatcher 인스턴스 목록 매핑.
- .sessionManagemen: 세션 관리 구성
- .sessionCreationPolicy: SessionCreationPolicy 지정
- SessionCreationPolicy.STATELESS : 스프링 시큐리티는 HttpSession을 생성하지 않고, SecurityContext를 얻기위해 사용하지 않는다.
- .addFilterBefore: 필터 앞에 커스텀 필터 추가.
참조
반응형
'Server > Spring&Spring Boot' 카테고리의 다른 글
[Spring Security] config 설정 2 (0) | 2022.12.04 |
---|---|
[Spring] @RequestBody 바인딩 시, 기본 생성자(@NoArgsConstructor)의 변덕과 필요한 이유 (0) | 2022.12.01 |
[Docs] Swagger 도입 (0) | 2022.11.24 |
[Spring Security] 기본 유저, 비밀번호 변경 (0) | 2022.11.19 |
[테스트 코드] Controller Test, MockMVC (0) | 2022.11.18 |