Spring Security를 사용하기 위해 먼저 Security 설정을 해주어야 한다.
이 때, 설정 정보들을 하나의 class에 적어주는데 이것이 바로 SecurityConfig.java이다.
SecurityConfig.java : Spring Security 설정 정보들을 작성해놓은 Class
해당 클래스 안에 filterChain이라는 method에 설정을 지정해준다.
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
return http
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.csrf().disable()
.addFilter(corsFilter)
.formLogin().disable()
.httpBasic().disable()
.authorizeRequests()
.antMatchers("/api/game/**", "/api/user/logout/**").authenticated()
.anyRequest().permitAll()
.and()
.logout()
.logoutSuccessUrl("/")
.and()
.addFilterBefore(tokenAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class)
.exceptionHandling()
.authenticationEntryPoint(new RestAuthenticationEntryPoint())
.accessDeniedHandler(tokenAccessDeniedHandler)
.and().build();
}
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
- session을 관리해주는 부분인데 위 코드는 세션을 사용하지 않겠다는 의미
.and()
- return type이 특정 Configurer인 경우에만 뒤에 붙인다.return type이 HttpSecurity인 경우 붙이지 ❌
.csrf.disable()
- Cross Site Request Forgery - 사이트 간 위조 요청
- A라는 도메인에서는 사용자가 일반 유저인지 악용된 공격인지 구분할 수가 없음.
- 따라서 GET을 제외한 CUD는 csrf 토큰이 있어야 요청을 받아들여줌.
- spring security에서는 CSRF protection이 default로 설정 되어있음.
- 근데 jwt라는 토큰을 어차피 사용할 예정이라 굳이 csrf protection이 필요 없음.
.formLogin().disable()
- Security에서 기본적으로 제공하는 로그인 폼을 사용하지 않겠다는 의미
.httpBasic().disable()
- http Basic 방식을 사용하지 않겠다는 의미
- http Basic 방식이란?
- 아래 그림과 같이 header의 Authorization에 키 값을 담아서 인증할 때 id, pw를 암호화 하지 않고 그대로 보내는 방식
.authorizeRequests()
- 인증과 관련된 설정을 시작하겠다는 의미
.antMatchers("/api/game/**").authenticated()
- 소괄호 안에 있는 경로로 접근 시 인증된 사용자만 접근을 허용하겠다는 의미
.anyRequest().permitAll()
- 이외에 다른 요청을 모두 허용하겠다는 의미
.logout()
.logoutSuccessUrl("/")
- 로그아웃 성공 시 메인으로 redirect 한다는 의미
.addFilterBefore(tokenAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class)
- Back으로 접근이 오면 가장 먼저 실행되고 커스텀 한 필터(tokenAuthenticationFilter())를 거치도록 설정
.exceptionHandling()
.authenticationEntryPoint(new RestAuthenticationEntryPoint())
.accessDeniedHandler(tokenAccessDeniedHandler)
- 인증 성공, 실패 시 적용될 필터 설정
'Spring Boot' 카테고리의 다른 글
[CORS 02] CORS 설정 | CorsConfig (0) | 2023.07.26 |
---|---|
[CORS 01] CORS 기본 동작 과정 (0) | 2023.07.26 |
[CORS 00] CORS, 왜 필요할까? (0) | 2023.07.26 |
Spring Security란 무엇인가 (0) | 2023.01.30 |