
스프링 숙련 개인과제
JWT Token과 Spring Security가 적용된 스케쥴앱 서버 제작
더 공부하게 된 내용들
- 스프링 Security를 사용하면 Filter에서 @Component와 @Order로 인한 적용이 불가하다.
- SecurityConfig에서 http.addFilterBefore를 통해 주입하여 해결
- 필터와 리소스 접근과는 아무 관련이 없음
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.csrf((csrf) -> csrf.disable());
http.sessionManagement((sessionManagement) ->
sessionManagement.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
);
http.authorizeHttpRequests((authorizeHttpRequests) ->
authorizeHttpRequests
.requestMatchers(PathRequest.toStaticResources().atCommonLocations())
.permitAll()
.requestMatchers("/user/**").permitAll()
.anyRequest().authenticated() // 그 외 모든 요청 인증처리
);
http.addFilterBefore(jwtAuthorizationFilter(), JwtAuthenticationFilter.class);
http.addFilterBefore(jwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);
http.addFilterBefore(new LoggingFilter(), JwtAuthorizationFilter.class);
return http.build();
}
- 위 코드에서 ("/user/**").permitAll()을 사용한다고 해서 해당 URL에 필터가 적용되지 않는 것이 아님, 해당 사항을 고려해서 필터를 구성해야한다.
- ex ) 회원가입 페이지에서도 인가 필터가 적용되니 토큰의 여부를 확인하고 없을 경우 다음 필터로 넘어가도록 해야한다.