로그인 회원가입 - JWT 적용하기

myeonji·2022년 5월 1일
0

jwt 라이브러리 추가

// https://mvnrepository.com/artifact/com.auth0/java-jwt
implementation group: 'com.auth0', name: 'java-jwt', version: '3.19.0'

SecurityConfig

@Configuration : IoC
@EnableWebSecurity : 시큐리티 활성화
@RequiredArgsConstructor : DI

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable();
        http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()
                .addFilter(corsFilter)
                .formLogin().disable()
                .httpBasic().disable()
                .addFilter(new JwtAuthenticationFilter(authenticationManager()))
                .addFilter(new JwtAuthorizationFilter(authenticationManager(), userRepository))
                .authorizeRequests()
                .antMatchers("/api/v1/user/**")
                .access("hasRole('ROLE_USER') or hasRole('ROLE_ADMIN')")
                .antMatchers("/api/v1/admin/**")
                .access("hasRole('ROLE_ADMIN')")
                .anyRequest().permitAll();
    }
  • http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) - 세션을 사용하지 않겠다는 문장
  • .formLogin().disable() .httpBasic().disable() - form 로그인 사용하지 않음 (세션 사용하지 않기 때문에 form 태그 사용 안함)

CorsConfig

스프링부트가 들고 있는 CorsFilter 사용

@Bean
    public CorsFilter corsFilter(){
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true);  // 내 서버가 응답할때 json을 자바스크립트에서 처리할 수 있게 설정
        config.addAllowedOrigin("*");  // 모든 ip에 응답을 허용
        config.addAllowedHeader("*");  // 모든 header에 응답을 허용
        config.addAllowedMethod("*");  // 모든 post, get, put, delete, patch를 허용

        source.registerCorsConfiguration("/api/**", config);
        return new CorsFilter(source);
    }
  • source.registerCorsConfiguration("/api/**", config); 여기로 들어오는 모든 주소는 해당 config 설정을 따르게 한다.
  • config.setAllowCredentials(true); 자바 스크립트 사용할 수 있도록 허용
  • SecurityConfig 에서 .addFilter(corsFilter) 를 설정하면 모든 요청은 corsFilter 필터를 타게 된다.
  • 컨트롤러에 @CrossOrigin 을 써도 되지만 이것은 인증이 필요한 요청은 거부됨 (인증이 없을 때 사용 가능) 따라서 인증이 필요한 요청도 받기 위해 시큐리티 필터에 corsFilter 등록 => CrossOrigin 정책에서 벗어나서 모든 요청을 허용

0개의 댓글