Spring security에서 static resources 파일 적용
Spring Security란?
회원가입과 로그인을 도와주는 스프링 기반 웹 애플리케이션의 인증과 권한을 담당하는 스프링의 하위 프레임워크
@EnableWebSecurity
모든 요청 url이 스프링 시큐리티 제어를 받도록 만드는 애너테이션
SecurityConfig
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
SecurityFilterChain filterChain(HttpSecurity httpSecurity)throws Exception{
httpSecurity.authorizeHttpRequests(
(authorizeHttpRequests)-> authorizeHttpRequests
//로그인없이 접근하고 싶은 url을 적는다
.requestMatchers("/","/users/**").permitAll()
);
return httpSecurity.build();
}
}
실행 화면
아래 이미지처럼 css파일이나 js 파일 같은 정적 리소스 파일이 적용되지 않는 것을 볼 수 있음
spring security에서 해당파일 모두 필터를 적용하기 있기 때문..
WebSecurityConfigureAdapter
이럴때 사용하던 클래스가 WebSecurityConfigurerAdapter인데 spring Security5.7.0 이후 deprecated(사용안함) 처리 됨
새로운 방법 1(SecurityFilterChain)
@Configuration
@EnableWebSecurity
public class SecurityConfig {
//방법1
@Bean
SecurityFilterChain filterChain(HttpSecurity httpSecurity)throws Exception{
httpSecurity.authorizeHttpRequests(
(authorizeHttpRequests)-> authorizeHttpRequests
.requestMatchers("/","/users/**","/css/**","/images/**","/js/**").permitAll()
);
return httpSecurity.build();
}
}
새로운 방법 2(WebSecurtyCustomizer)
//import 조심
import org.springframework.boot.autoconfigure.security.servlet.PathRequest;
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
SecurityFilterChain filterChain(HttpSecurity httpSecurity)throws Exception{
httpSecurity.authorizeHttpRequests(
(authorizeHttpRequests)-> authorizeHttpRequests
.requestMatchers("/","/users/**").permitAll()
);
return httpSecurity.build();
}
//방법2
@Bean
public WebSecurityCustomizer webSecurityCustomizer(){
return web -> web.ignoring()
.requestMatchers(PathRequest
.toStaticResources()
.atCommonLocations()
);
}
비교
방법1 - permitAll()을 사용하여 정적 리소스 접근 허용하는 것은 spring security의 필터 체인을 통과함
-> 성능 정하 발생 가능성 있음
방법2 -WebSecuriyCustomizer로정적 리소스 접근을 허용하는 것은 spring security의 필터 체인을 통과하지 않음
-> 좀 더 가벼운 처리 가능
주의점
방법2의 atCommonLocations()는 StaticResourceLocation을 반환
프로젝트의 정적 리소스 파일 경로와 동일한지 확인 필요
<참고>
https://spring.io/blog/2022/02/21/spring-security-without-the-websecurityconfigureradapter
https://velog.io/@jeongm/SpringSecurity-staticcssjs...-%ED%8C%8C%EC%9D%BC-%EC%84%A4%EC%A0%95