본문 바로가기
Back-End/Spring

[디버깅] Spring Security 사용 중 템플릿에 CSS가 적용되지 않는 현상

by blackjack_96 2024. 7. 18.

저는 Spring Security를 이용하여 

사용자 정의 로그인 창을 구현하고 있었습니다.

 

먼저 로그인 창은 다음과 같습니다.

 

 소스코드 : resources/templates/form/login.html 파일

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Login Page</title>
    <link rel="stylesheet" href="/css/login.css">
</head>
<body>
<div class="login-container">
    <form class="login-form" action="/login" method="post">
        <h2>로그인</h2>
        <input type="text" name="username" placeholder="Username" />
        <input type="password" name = "password" placeholder="Password" />
        <button type="submit">Login</button>
    </form>
</div>

</body>
</html>

 

주의 깊게 보아야 할 부분은 다음 부분입니다.

<link rel="stylesheet" href="/css/login.css">

 

이와 같이, 특정 템플릿에 적용할 css 파일을 명시하기 위해서는 다음과 같은 규칙을 알아야 합니다.

 

- 명시한 css 파일 경로 : /css/login.css

- 매핑되는 css 파일 : resources/static/css/login.css

 

이렇게 명시를 해 주었는데, css파일의 스타일이 적용되지 않는 문제점이 있었습니다.

 

 

문제 원인과 해결

Spring security에서는 기본적으로 모든 정적 파일의 접근 권한도 함께 관리하기 때문에

아무런 설정이 없으면

위 경로에 존재하는 css파일에 접근하지 못합니다.

따라서 다음과 같이, static/css디렉토리 이하의 모든 파일에 대해 접근권한을 허용해야 합니다.

 

String[] urlsToBePermittedAll = {
            "/contact/**",
            "/notices/**",
            "/register/**",
            "/invalidSession/**",
            "/login/**",
            "/logout/**",
            "/",
            "/css/**", // 반드시 추가할것
            "/error/**"
    };
    
    
    ...
    http.authorizeHttpRequests(
                // 인증이 필요한 url, 인증 없이도 접근 가능한 url 을 설정하는 부분이다.
                (requests) -> requests.
                        requestMatchers(urlsToBeAuthenticated).authenticated().
                        requestMatchers(urlsToBePermittedAll).permitAll()).
                        
                        
    ...