ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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 때문에 헤맨적이 있는데 이렇게 설정을 하면 된다.

Designed by Tistory.