728x90
Spring Security를 사용하여 로그인 정보를 Thymeleaf에서 출력하는 방법
1. 프로젝트 설정
먼저 Spring Boot 프로젝트를 생성하고, 필요한 의존성을 추가합니다.
build.gradle (또는 pom.xml)
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
}
2. Spring Security 설정
로그인 및 인증 관련 설정을 포함한 SecurityConfig 클래스를 만듭니다.
SecurityConfig.java
import org.springframework.context.annotation.Bean;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.stereotype.Controller;
@Controller
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.permitAll()
.and()
.logout()
.permitAll();
return http.build();
}
@Bean
public UserDetailsService userDetailsService() {
InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
manager.createUser(User.withDefaultPasswordEncoder()
.username("user")
.password("password")
.roles("USER")
.build());
return manager;
}
}
위 설정에서는 InMemoryUserDetailsManager를 사용하여 메모리에 간단한 사용자 데이터를 생성합니다. 실제 애플리케이션에서는 DB나 다른 외부 인증 소스를 사용할 수 있습니다.
3. 로그인 페이지 만들기
사용자 로그인 페이지를 작성합니다. 이 페이지는 /login 경로로 접근할 수 있습니다.
login.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Login</title>
</head>
<body>
<h2>Login</h2>
<form th:action="@{/login}" method="post">
<div>
<label for="username">Username:</label>
<input type="text" id="username" name="username">
</div>
<div>
<label for="password">Password:</label>
<input type="password" id="password" name="password">
</div>
<div>
<button type="submit">Login</button>
</div>
</form>
</body>
</html>
4. 로그인 후 사용자 정보 출력
로그인한 사용자의 정보를 Thymeleaf에서 출력하려면, Spring Security의 Principal 객체를 사용하여 사용자 정보를 얻을 수 있습니다.
index.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Home</title>
</head>
<body>
<h1>Welcome, <span th:text="${#authentication.name}"></span>!</h1>
<p>User roles: <span th:text="${#authentication.authorities}"></span></p>
<!--ROLE_USER 권한을 갖는다면 이 글이 보임-->
<h1 sec:authorize="hasRole('ADMIN')">Has admin Role</h1>
<!--ROLE_ADMIN 권한을 갖는다면 이 글이 보임-->
<h1 sec:authorize="hasRole('USER')">Has user Role</h1>
<!--어떤 권한이건 상관없이 인증이 되었다면 이 글이 보임-->
<div sec:authorize="isAuthenticated()">
Only Authenticated user can see this Text
</div>
<!--인증시 사용된 객체에 대한 정보-->
<b>Authenticated DTO:</b>
<div sec:authentication="principal"></div>
<div th:text="${#authentication.principal}"></div>
<!--인증시 사용된 객체의 Username (ID)-->
<b>Authenticated username:</b>
<div sec:authentication="name"></div>
<div th:text="${#authentication.name}"></div>
<!--객체의 권한-->
<b>Authenticated user role:</b>
<div sec:authentication="principal.authorities"></div>
<div th:text="${#authentication.principal.authorities}"></div>
<a th:href="@{/logout}">Logout</a>
</body>
</html>
LIST
'Develop' 카테고리의 다른 글
PostgreSQL에서 한글 ORDER BY 정렬 문제 해결하기 COLLATE (4) | 2024.10.08 |
---|---|
[jQuery] 자동완성 Autocomplete 기능 설명 및 사용 방법 (5) | 2024.10.08 |
[Javascript] jQuery 이벤트의 동적 바인딩과 정적 바인딩 (8) | 2024.10.02 |
타임리프(Thymeleaf) 현재 날짜 출력 및 format 변환 (6) | 2024.09.28 |
[JavaScript] map() 메서드 사용방법 및 활용 예제 (11) | 2024.09.24 |