Spring

[Spring/Error] WebSecurityCustomizer를 통해 정적 자원에 대한 Ignore가 안될때

Jwanna 2023. 8. 28. 20:10

원인

html의 img 태그를 사용하여 지정한 이미지가 어플리케이션 실행 시 불러와지지 않는 문제가 발생했다.

<html lang="ko"
      xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
      layout:decorate="~{layouts/main-layout}">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <title>Home</title>
</head>
<body>
<div layout:fragment="content">
    <img src="/img/home_1.png" loading="lazy" alt="img" width="100%"/>
</div>
</body>
</html>

 

사진이 불러와지지 않는다..

 

자세히 보면 home_1.png 파일에 대해 Redirect 요청이 가고 있는 것을 볼 수 있다.

 

 

Configuration 파일을 보면 정적 리소스에 대해 Ignore 처리를 해줬음에도 파일이 로드가 되지 않았다.

@Configuration
public class WebConfiguration {
    @Bean
	public WebSecurityCustomizer webSecurityCustomizer() {
		return web -> web.ignoring()
			.requestMatchers(PathRequest.toStaticResources().atCommonLocations());
	}
    ...
}

 

 

해결

위 코드의 atCommonLocations() 메소드에 Cmd + B (Ctrl + B) 또는 Cmd (Ctrl) 클릭을 통해 타고 들어가면

public final class StaticResourceRequest {
	public StaticResourceRequestMatcher atCommonLocations() {
		return at(EnumSet.allOf(StaticResourceLocation.class));
	}
}

 

위와 같은 코드를 볼 수 있고, StaticResourceLocation.class를 타고 들어가면

public enum StaticResourceLocation {
	CSS("/css/**"),
	JAVA_SCRIPT("/js/**"),
	IMAGES("/images/**"),
	WEB_JARS("/webjars/**"),
	FAVICON("/favicon.*", "/*/icon-*");
    ...
}

 

위와 같은 enum 클래스로 구현된 것을 볼 수 있다.

 

여기를 보면 Default 경로인 src/main/resources/static/ 하위의 경로를 지정한 것을 볼 수 있는데

(Default 경로는 application.properties와 같은 설정을 통해서 변경할 수 있음)

패키지 이름을 enum 클래스의 경로와 다르게 지정해주어서 생긴 기본적인 에러였다..

 

images로 패키지 이름을 변경해주면 이미지가 정상적으로 로딩되는 것을 볼 수 있다.