-
jwt를 위한 security 설정스프링/스프링 시큐리티 2024. 1. 12. 20:38
jwt를 사용하기 위해서는 기본적인 스프링 시큐리티 설정이 필요하다.
이번 포스팅에서는 jwt를 사용하기 전에 기본적인 설정들을 해줄 것이다.
SecurityConfig.class
@Configuration @EnableWebSecurity @RequiredArgsConstructor public class SecurityConfig { private final CorsConfig corsConfig; @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.csrf(CsrfConfigurer::disable); http.sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)); // 세션을 사용하지 않는다. http.formLogin(formLogin -> formLogin.disable() ); http.httpBasic(httpBasic -> httpBasic.disable() ); http.authorizeHttpRequests(authorize -> authorize .requestMatchers("api/v1/user/**").authenticated() .requestMatchers("api/v1/manager/**").hasAnyRole("ADMIN", "MANAGER") .requestMatchers("api/v1/admin/**").hasAnyRole("ADMIN") .anyRequest().permitAll() ); return http.build(); } public class MyCustomDsl extends AbstractHttpConfigurer<MyCustomDsl, HttpSecurity> { @Override public void configure(HttpSecurity http) throws Exception { AuthenticationManager authenticationManager = http.getSharedObject(AuthenticationManager.class); http .addFilter(corsConfig.corsFilter()); // 모든 요청이 CorsConfig의 corsFilter를 타서 CORS 요청을 모두 허용 } } }
스프링 시큐리티를 공부할 때 학습했던 SecurityConfig이다. SessionCreationPolicy.STATELESS라는 설정이 있는데, 세션을 사용하지 않는다는 설정이다. 또한 addFilter(corsConfig.corsFilter())라는 것이 있는데 CORS 관련 설정이다.
모든 요청이 CorsConfig의 corsFilter를 타고 CORS 요청을 허용해준다.
컨트롤러에 @CrossOrigin라고 설정해주면 되는데 시큐리티 필터에 등록 인증을 별도로 해줘야한다.
httpBasic.disable()이라는 것은 HTTP Basic 인증을 비활성화하고 JWT를 사용하기 위한 설정이다.
JWT를 사용하기 위해서는 위와 같은 설정이 필요하다.
CorsConfig.class
@Configuration public class CorsConfig { @Bean public CorsFilter corsFilter() { UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); CorsConfiguration config = new CorsConfiguration(); config.setAllowCredentials(true); // 내 서버가 응답을 할 때 json을 자바스크립트에서 처리할 수 있게 함 config.addAllowedOrigin("*"); // 모든 ip에 응답을 허용 config.addAllowedHeader("*"); // 모든 헤더에 응답을 허용 config.addAllowedMethod("*"); // 모든 post, get, put, delete, patch 등의 요청에 허용 source.registerCorsConfiguration("/api/**", config); return new CorsFilter(source); }
CORS 관련 설정들이다. 위에 각각의 주석들을 달아놨는데, 각각의 역할을 한다.
저번에 프로젝트 진행했을 때 CORS 때문에 헤맨적이 있는데 이렇게 설정을 하면 된다.
'스프링 > 스프링 시큐리티' 카테고리의 다른 글
jwt - JwtAuthenticationFilter (0) 2024.01.13 jwt 임시 토큰을 만들어서 필터 테스트 (0) 2024.01.12 JWT(Json Web Token) (0) 2024.01.12 OAuth - 네이버 로그인 (provider 직접 등록) (0) 2024.01.10 OAuth - 페이스북 로그인 (OAuth2UserInfo - 각각의 provider) (0) 2024.01.10