Spring Security를 설정해보았는데 해놓고 정확히 모르는 부분이 많았다.
그런데 다른 분의 문제를 해결하면서 어떻게 돌아가는지 알게 된 부분이 있다.
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.httpBasic().disable() // rest api 이므로 기본 설정 미사용
.csrf().disable() // rest api 이므로 csrf 보안 미사용
.formLogin().disable()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) // jwt 사용하므로 세션 미사용
.and()
.authorizeHttpRequests()
.antMatchers("/api/users/**").permitAll()
.anyRequest().authenticated()
.and()
.exceptionHandling().authenticationEntryPoint(new CustomAuthenticationEntryPoint())
.and()
.exceptionHandling().accessDeniedHandler(new CustomAccessDeniedHandler())
.and()
.addFilterBefore(new JwtAuthFilter(jwtUtil), UsernamePasswordAuthenticationFilter.class);
return http.build();
}
.exceptionHandling().authenticationEntryPoint(new CustomAuthenticationEntryPoint())
이 부분은 헤더에 Authorization Token 을 넣어주지 않았을때 발생하는 Exception을 핸들링 하는 부분이었고(추정),
.exceptionHandling().accessDeniedHandler(new CustomAccessDeniedHandler())
이 부분은 권한에 관련된 Exception을 핸들링 하는 부분이었다.(추정)
이전에 적용을 하면서 알게 된 것 중에 하나가 시큐리티 관련된 에러는 ControllerAdvice 에서 못잡는다였는데, accessDeniedHandler는 ControllerAdvice에 잡히는 것이었다. 아마도 @PreAuthorize가 Controller단에서 실행되어서 일까????
일단 이 지식들이 정확하지 않으니 오늘은 적어두고 다음에 다시 공부해서 써야겠다.
'내일배움캠프 > TIL' 카테고리의 다른 글
2023/1/9 (0) | 2023.01.09 |
---|---|
2023/1/7 (0) | 2023.01.07 |
2023/1/1 포스트맨에 토큰값 세팅하기 (0) | 2023.01.03 |
2022.12.28 (1) | 2022.12.28 |
2022.12.22 (2) | 2022.12.22 |