Spring Security๋ฅผ ํ๋ก์ ํธ์ ์ ์ฉํ๋ฉด, ๋ก๊ทธ์ธํ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ๋ทฐ(Thymeleaf)์
์ปจํธ๋กค๋ฌ์์ ์ฝ๊ฒ ๊ฐ์ ธ์์ ํ์ฉํ ์ ์๋ค.
์ด๋ฒ ๊ธ์์๋ ๋ํ์ ์ผ๋ก ๋ง์ด ์ฐ์ด๋ 3๊ฐ์ง ํจํด์ ์ ๋ฆฌํ๋ ค๊ณ ํ๋ค.
1. ๋ก๊ทธ์ธ ์ฌ์ฉ์๋ง ๋ฉ๋ด ๋ณด์ด๊ฒ ํ๊ธฐ
Thymeleaf์์ thymeleaf-extras-springsecurity6 ์์กด์ฑ์ ์ถ๊ฐํ๋ฉด,
sec:authorize ์์ฑ์ ์ฌ์ฉํ ์ ์๋ค.
ํ
ํ๋ฆฟ ์๋จ์ ๋ค์์คํ์ด์ค๋ฅผ ์ ์ธํด์ผ ํ๋ค:
<html xmlns:th="http://www.thymeleaf.org"
xmlns:sec="http://www.thymeleaf.org/extras/spring-security">
๊ทธ ๋ค์ ์ํ๋ ์์ญ์ ์กฐ๊ฑด์ ๊ฑธ๋ฉด ๋๋ค :
<!-- ๋ก๊ทธ์ธ๋ ์ฌ์ฉ์๋ง '๋ฑ๋ก' ๋ฒํผ ๋ณด์ด๊ธฐ -->
<div sec:authorize="isAuthenticated()">
<a href="/board/register">
<button type="button">๋ฑ๋ก</button>
</a>
</div>
| isAuthenticated() | ๋ก๊ทธ์ธ๋ ์ฌ์ฉ์๋ง |
| isAnonymous() | ๋ก๊ทธ์ธ ์ํ ์ฌ์ฉ์๋ง |
| hasRole('ADMIN') | ํน์ ๊ถํ์ ๊ฐ์ง ์ฌ์ฉ์๋ง |
2. ๋ก๊ทธ์ธ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ํ๋ฉด์ ์ถ๋ ฅํ๊ธฐ

Spring Security๊ฐ ์ ๊ณตํ๋ #authentication ๊ฐ์ฒด๋ฅผ ์ด์ฉํ๋ฉด
ํ์ฌ ๋ก๊ทธ์ธ๋ ์ฌ์ฉ์์ username(id)์ ๋ฐ๋ก ์ถ๋ ฅํ ์ ์๋ค.
<!-- ํ์ฌ ๋ก๊ทธ์ธํ ์ฌ์ฉ์ id ํ์ -->
<span th:text="${#authentication.name}"></span>
<!-- ํผ์ ์๋ ์
๋ ฅ -->
<input type="text" name="id" th:value="${#authentication.name}" readonly>
์ฌ๊ธฐ์ #authentication.name์ Principal.getName()๊ณผ ๋์ผํ๋ค.
์ฆ, ๋ก๊ทธ์ธํ ๋ ์ฌ์ฉํ ์์ด๋(id)๊ฐ ๋ค์ด์จ๋ค.
3. ์ปจํธ๋กค๋ฌ์์ ๋ก๊ทธ์ธ ์ฌ์ฉ์ ํ์ฉํ๊ธฐ
๋ก๊ทธ์ธ๋ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์๋ฒ์์๋ ํ์ฉํด์ผ ํ๋ค.
์๋ฅผ ๋ค์ด ๊ฒ์๊ธ ๋ฑ๋ก ์, ์์ฑ์๋ฅผ ๋ฌด์กฐ๊ฑด ๋ก๊ทธ์ธ ์ฌ์ฉ์ id๋ก ์ ์ฅํ๋ ค๋ฉด ์ด๋ ๊ฒ ํ๋ค:
@PostMapping("/register")
public String registerPost(BoardDTO dto,
Principal principal) {
// ๋ก๊ทธ์ธํ ์ฌ์ฉ์ id๋ฅผ ์์ฑ์์ ๊ฐ์ ์ธํ
dto.setId(principal.getName());
boardService.register(dto);
return "redirect:/board/list";
}
์ด๋ ๊ฒ ํ๋ฉด ํ๋ฉด์์ ์กฐ์ํ๋๋ผ๋ ์์ฑ์ ํ๋๋ ํญ์ ๋ก๊ทธ์ธํ ์ฌ์ฉ์ id๋ก ๋ฎ์ด์ฐ๊ธฐ ๋๋ค.
4. ์์ฑ์ ๋ณธ์ธ๋ง ๋งํฌ ํ์ฑํํ๊ธฐ
๊ฒ์๊ธ ๋ชฉ๋ก์์ ๊ธ ๋ฒํธ๋ฅผ ํด๋ฆญํ ์ ์๋ ๋งํฌ๋ฅผ, ์์ฑ์ ๋ณธ์ธ์๊ฒ๋ง ํ์ฉํ๊ณ ์ถ๋ค๋ฉด :
<th>
<!-- ๋ณธ์ธ์ผ ๋๋ง ๋งํฌ -->
<a th:if="${dto.id == #authentication.name}"
th:href="@{/board/read(no=${dto.no}, page=${list.number +1})}">
[[${dto.no}]]
</a>
<!-- ๋ค๋ฅธ ์ฌ๋์ผ ๊ฒฝ์ฐ ๋จ์ ์ถ๋ ฅ -->
<span th:if="${dto.id != #authentication.name}">
[[${dto.no}]]
</span>
</th>
์ ๋ฆฌ
sec:authorize๋ก ๋ฉ๋ด/๋ฒํผ ํ์ ์กฐ๊ฑด ์ ์ด
#authentication.name์ผ๋ก ๋ก๊ทธ์ธ ์ฌ์ฉ์ id ์ถ๋ ฅ
์ปจํธ๋กค๋ฌ์์ Principal ์ฃผ์ ๋ฐ์ dto์ id ์ธํ
th:if ์กฐ๊ฑด๋ฌธ์ผ๋ก ๋ณธ์ธ/๊ถํ ์ฌ๋ถ์ ๋ฐ๋ผ UI ์ ์ด
๐ ์ด๋ฐ ํจํด์ ์ตํ๋๋ฉด “๋ก๊ทธ์ธ ์ฌ์ฉ์๋ง ๊ธฐ๋ฅ ํ์ฉ” ๊ฐ์ ์๊ตฌ์ฌํญ์ ์์ฝ๊ฒ ํด๊ฒฐํ ์ ์๋ค.