본문 바로가기

WEB/Spring

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

 

Spring Security without the WebSecurityConfigurerAdapter

In Spring Security 5.7.0-M2 we deprecated the WebSecurityConfigurerAdapter, as we encourage users to move towards a component-based security configuration. To assist with the transition to this new style of configuration, we have compiled a list of common

spring.io

https://velog.io/@jeongm/SpringSecurity-staticcssjs...-%ED%8C%8C%EC%9D%BC-%EC%84%A4%EC%A0%95

 

SpringSecurity - static(css,js...) 파일 설정

SpringSecurity에서 static 파일을 설정해보쟈!

velog.io

 

'WEB > Spring' 카테고리의 다른 글

메세지, 국제화 인코딩 오류  (0) 2024.06.16
Enum과 Thymeleaf  (0) 2024.06.16
valid와 validation  (0) 2024.05.22
Entity와 DTO  (0) 2024.05.21
DAO/DTO  (0) 2024.05.18