SpringBoot에서 SpringSecurity를 적용하면 Security Filter에 걸려 css가 적용되지 않습니다. 그렇기 때문에 따로 설정을 통해 static 파일을 설정해 줘야합니다.
@Bean
public WebSecurityCustomizer webSecurityCustomizer(){
return web -> web.ignoring()
.requestMatchers(PathRequest
.toStaticResources()
.atCommonLocations())
.antMatchers("/fonts/**","/img/**")
.antMatchers("/h2-console/**");
// return web -> web.ignoring()
// .antMatchers("/css/**","/img/**");
}
PathRequest.toStaticResources().atCommonLocations()
.atCommonLocations()
메서드는 Spring Security가 정적 리소스 파일을 찾아보는 기본적인 위치들을 나타내며, 이러한 경로들을 일일이 설정하지 않아도 Spring Security가 자동으로 이를 감지하고 접근을 허용함deprecated
되었다deprecated
된 이후에는 빈으로 등록해서 사용한다.WebSecurityCustomizer
를 사용하여 정적 리소스에 대한 접근을 설정하면, SecurityFilterChain
내부에서 이 설정이 자동으로 적용되게 됩니다.SecurityFilterChain
내에서 따로 설정할 필요 없이, WebSecurityCustomizer
에 설정한 내용이 전체 보안 설정에 통합되어 사용되기 때문에 두 가지 설정이 중복되거나 충돌할 필요가 없습니다.WebSecurityCustomizer
를 사용하여 설정하는 것이 보다 효율적이고 권장되는 방법입니다. 이 방법은 정적 리소스에 대한 요청 처리를 Spring Security의 필터 체인에 포함시키지 않기 때문에 더 가벼운 처리가 가능하며, 보다 빠른 성능을 제공할 수 있습니다.SecurityFilterChain
내에서 .permitAll()
을 사용하여 정적 리소스에 대한 접근을 허용하게 할 경우, 해당 요청 또한 Spring Security의 필터 체인을 통과하게 됩니다. 이는 조금 더 무거운 처리가 되는 방식이며, 특히 정적 리소스가 많고 부하가 큰 상황에서는 약간의 성능 저하가 발생할 수 있습니다.WebSecurityCustomizer
를 사용하여 정적 리소스 접근을 설정하는 것이 권장됩니다.SecurityFilterChain 로 설정 시
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
return http
.authorizeHttpRequests()
.antMatchers("/css/**","/js/**").permitAll()
.anyRequest().permitAll()
.build();
}
WebSecurityCustomizer 로 설정 시
@Bean
public WebSecurityCustomizer webSecurityCustomizer(){
return web -> web.ignoring()
.requestMatchers(PathRequest
.toStaticResources()
.atCommonLocations()
);
}
web.ignoring()
을 사용하여 정적 리소스를 설정하면 Spring Security는 해당 리소스의 요청이 들어왔을 때 보안 필터를 적용하지 않고 직접 처리하도록 설정합니다. 이렇게 하면 정적 리소스에 대한 요청이 필터 체인을 거치지 않고 바로 처리되어 보안 필터의 부하를 줄일 수 있습니다.