jwt 라이브러리 추가
// https://mvnrepository.com/artifact/com.auth0/java-jwt
implementation group: 'com.auth0', name: 'java-jwt', version: '3.19.0'
@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 태그 사용 안함)스프링부트가 들고 있는 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);
자바 스크립트 사용할 수 있도록 허용.addFilter(corsFilter)
를 설정하면 모든 요청은 corsFilter 필터를 타게 된다.