저는 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()).
...'Back-End > Spring' 카테고리의 다른 글
| 왜 Spring Security 의존성을 추가 하기만 해도 모든 엔드포인트에 인증과정이 요구되는가 (0) | 2024.10.22 |
|---|---|
| [디버깅] Maven으로 빌드한 스프링부트 프로젝트에서 템플릿 파일 인식 (0) | 2024.07.18 |
| 데이터베이스의 엔티티(Entity)에 대한 고찰, 그리고 JPA의 @Entity 어노테이션 (0) | 2024.04.12 |
| 상황을 통해 이해하는 JPA 영속성 전이 및 CASCADE 옵션 (0) | 2024.04.10 |
| Spring Data JPA에서의 Transaction 및 수정 작업 (0) | 2024.04.09 |