Spring Security ๋
์ธ์ฆ๊ณผ ์ธ๊ฐ๋ผ๋ ๊ฐ๋ ์ ์ต๋ํ ์ฝ๊ณ ์ ์ฐํ๊ฒ ๊ตฌํํ ์ ์๋๋ก ๋ง๋ค์ด์ง Framework
- Spring์ ์ฌ์ฉํ๋ค๋ฉด ์ฌ์ค์ ์ต์ ์ Security Framework
- Web ๊ธฐ๋ฐ Application์ ๋ณด์์ ์ธ ์ ํ์ ์ถ๊ฐํ๊ธฐ ์ํด ์ฌ์ฉํ๋ Security Framework ์ค์ ํ๋
- Rest API endpoint, mvc url, ์ ์ ๋ฆฌ์์ค์๊ฐ์ ๋ฆฌ์์ค๋ค์ ์ ๊ทผํ๋ ค๋ ์์ฒญ์ ์ธ์ฆ์ ์ฑ ์์ง๋ ๊ฒ.
- Spring ์ํ๊ณ์ ํธํ์ฑ์ด ๋๊ณ ์ปค์คํ ์ด ๋งค์ฐ ์ฝ๋ค.
์ธ์ฆ
์ฌ์ฉ์๊ฐ ๋๊ตฌ์ธ์ง ํ์ธํ๋ ์ ์ฐจ. ์ฆ, "๋น์ ์ ๋๊ตฌ์ ๋๊น?"๋ฅผ ํ์ธ
์ฌ๊ธฐ์ ๋ฌธ์ ์ ์ด ๋ฐ์ํ๋ค.
์ดํ์ ์ ์ ๊ฐ UserA๋ผ๋ ๊ฒ์ ์ด๋ป๊ฒ ์ฆ๋ช ํ ์ ์์๊น?
๋ฐฉ๋ฒ 1 : ๋ชจ๋ ์์ฒญ๋ง๋ค ๋์ ID์ ํจ์ค์๋๋ฅผ ํฌํจ์์ผ์ ์์ฒญํ๋ค.
๋ฐฉ๋ฒ 2 : ๋์ ID์ ํจ์ค์๋๋ฅผ ์๋ฒ์ ์ฃผ๊ณ ๊ทธ ์๋ต์ผ๋ก ์๋ฌด๋ ํด๋ ์ด ๋ถ๊ฐ๋ฅํ key๋ฅผ ๋ฐ๋๋ค. ๊ทธ key๋ฅผ ๋ชจ๋ ์์ฒญ์ ํฌํจํด์ ๋ณด๋ธ๋ค.
์ธ๊ฐ
์ธ์ฆ ์ดํ์ ๋ฆฌ์์ค์ ๋ํ ๊ถํ ํต์ ๋ฅผ ์๋ฏธ. ์ฆ, "๋น์ ์ ๊ถํ์ ๋ฌด์์ ๋๊น? ๋น์ ์ ๋ฌด์์ ํ ์ ์์ต๋๊น?"๋ฅผ ํ์ธํ๋ค.
ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ ์์ ์ด ํ๊ฐ๋ ์์ ์ธ์ง๋ฅผ ํ์ธํ๋ ์ ์ฐจ
์ ) ์ผ๋ฐ ์ฌ์ฉ์๋ ๊ด๋ฆฌ์ ํ์ด์ง์ ์ ์์ด ๋ถ๊ฐ๋ฅํด์ผํจ
Tymeleaf ์ค์ต ์์
<html
lang="ko"
xmlns:th="http://www.thymeleaf.org"
xmlns:sec="http://www.thymeleaf.org/extras/spring-security"
>
<body>
<div th:fragment="nav">
<nav class="navbar navbar-expand-lg navbar-dark bg-primary">
<div class="container-fluid">
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<p
class="nav-link active"
sec:authorize="isAuthenticated()"
sec:authentication="name">
</p>
</li>
<li class="nav-item">
<a class="nav-link active" th:href="@{/}">ํ</a>
</li>
<li class="nav-item">
<!-- ๊ด๋ฆฌ์๋ง -->
<a
class="nav-link active"
sec:authorize="hasAnyRole('ROLE_ADMIN')"
th:href="@{/admin}"
>
๊ด๋ฆฌ์ ํ์ด์ง
</a>
</li>
<li class="nav-item">
<!-- ๋ก๊ทธ์ธํ ์ฌ๋ ๋ชจ๋ -->
<a
class="nav-link active"
sec:authorize="isAuthenticated()"
th:href="@{/notice}"
>
๊ณต์ง์ฌํญ
</a>
</li>
<li class="nav-item">
<!-- ์ ์ ๋ง -->
<a
class="nav-link active"
sec:authorize="hasAnyRole('ROLE_USER')"
th:href="@{/note}"
>
๊ฐ์ธ๋
ธํธ
</a>
</li>
<li class="nav-item">
<!-- ๋ก๊ทธ์ธ ์ํ ์ฌ๋๋ง -->
<a
class="nav-link active"
sec:authorize="!isAuthenticated()"
th:href="@{/login}"
>
๋ก๊ทธ์ธ
</a>
</li>
<li class="nav-item">
<!-- ๋ก๊ทธ์ธ ์ํ ์ฌ๋๋ง -->
<a
class="nav-link active"
sec:authorize="!isAuthenticated()"
th:href="@{/signup}"
>
ํ์๊ฐ์
</a>
</li>
<li class="nav-item">
<!-- ๋ก๊ทธ์ธํ ์ฌ๋๋ง -->
<a
class="nav-link active"
sec:authorize="isAuthenticated()"
th:href="@{/logout}"
>
๋ก๊ทธ์์
</a>
</li>
</ul>
</div>
</div>
</nav>
</div>
</body>
๊ณต์๋ฌธ์