๐ฅ #7 ์คํ๋ง ์ํ๋ฆฌํฐ ์ด๊ธฐ ์ค์
๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ์คํ๋ง ์ํ๋ฆฌํฐ ์ ์ฉํ๊ธฐ
- ๋ก๊ทธ์ธ ์์ฒญ์ ํ๋ฉด ์ํ๋ฆฌํฐ๊ฐ ์ง์ผ๋ณด๋ค๊ฐ ๋ก๊ทธ์ธ ์์ฒญ์ ๊ฐ๋ก์ฑ๋ค.
- ๋ก๊ทธ์ธ ์์ฒญ์ผ๋ก ๋ค์ด์จ ํ๋ผ๋ฏธํฐ(username, password)๋ฅผ ๊ฐ์ง๊ณ ์ํ๋ฆฌํฐ๊ฐ ๋ก๊ทธ์ธ์ ์งํํ๋ค.
- ๋ก๊ทธ์ธ ์งํ์ ์๋ฃํ ํ ์ํ๋ฆฌํฐ ์ ์ฉ(?) ์ธ์ ์ ์ ์ ์ ๋ณด๋ฅผ ๋ฃ์ด๋๋๋ค. (์ด ๋ํ ์คํ๋ง์ด IoC๋ก ๊ด๋ฆฌ)
- ์ด๋, ์ํ๋ฆฌํฐ ์ธ์ ์์๋ User ๊ฐ์ฒด๋ฅผ ์ ์ฅ์ํฌ ์ ์๊ณ , UserDetails ํ์ ์ผ๋ก ์ ์ฅ์ํจ๋ค.
- ์ํ๋ฆฌํฐ ์ธ์ ์์ ์๋ ์ ์ ์ ๋ณด๋ฅผ DI ๋ฐ์์ ์ฐ๋ฉด ๋๋ค.
< pom.xml >
- JSP์์ ์ํ๋ฆฌํฐ๋ฅผ ์ฐ๊ธฐ ์ํ ํ๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
<!-- ์ํ๋ฆฌํฐ ํ๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
</dependency>
- ์ํ๋ฆฌํฐ๋ฅผ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
์์ ์ค์ ์ด ๋ชจ๋ ํ์ด์ง๋ฅผ ์ ๊ถ๋ฒ๋ฆฌ๊ฒ ๋๋ค.
์ฆ, ์ด๋ ๊ฒ ์คํ๋ง ์ํ๋ฆฌํฐ๋ฅผ ์ ์ฉํ๊ณ , Controller์ ๋ฐ๋ก ์ค์ ํ์ง ์์ผ๋ฉด
ํ์ด์ง๊ฐ ๋ชจ๋ ์ด๋ ๊ฒ ๋ซํ๊ฒ ๋๋ค. ์ํ๋ฆฌํฐ ์ค์ ์ผ๋ก ์ธํด ๋ชจ๋ ๋๋ฌธ(?)์ด ๋ซํ๋ฒ๋ฆฐ ๊ฒ์ด๋ค.
๊ธฐ๋ณธ Username์ user์ด๊ณ , ์ฝ์์ ๋ณด๋ฉด ์ด๋ ๊ฒ ๋น๋ฐ๋ฒํธ๋ฅผ ์ค๋ค.
์คํ๋ง ์ํ๋ฆฌํฐ๊ฐ ๊ฐ๋ก์ฑ์ ๋ก๊ทธ์ธ์ด ๊ฐ๋ฅํ๋ค.
์ด๊ฑธ ์
๋ ฅํ๊ณ ๋ก๊ทธ์ธ ํด์ผ์ง ํ์ด์ง์ ๋ค์ด๊ฐ ์ ์๊ฒ ๋๋ค.
์ด๋กท๊ฒ ๋ค์ด์๋ค !!
์ด๋๋ถํฐ๋ session์ด ์๋์ผ๋ก ์๊ธด๋ค.
ํ๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉํ๊ธฐ!!
๋งจ ์์ pom.xml์ ํ๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์ ํ ๊ฒ์ ์ฌ์ฉํ๊ธฐ ์ํด์ ์ฌ์ดํธ์ ๋ค์ด๊ฐ์ ์๋ taglib๋ฅผ ๊ฐ์ ธ์จ๋ค.
๊ทธ ๋ค์ header ๋งจ ์์ ๋ฃ์ด์ค๋ค. jstl ์ฒ๋ผ !!
<sec:authorize access="isAuthenticated()">
<sec:authentication property="principal" var="principal"/>
</sec:authorize>
principal ์ด๋ผ๋ var๋ฅผ principal๋ก ๋ง๋ค๊ณ ๋ด๋๋ค. (๋งคํํ๋ค)
๊ทธ๋ฌ๋ฉด principal์ด ๋น์ด์๋์ง ์๋์ง ์ฌ๋ถ๋ก ๋ก๊ทธ์ธ ํ ์ฌ์ฉ์์ ํ์ง ์๋ ์ฌ์ฉ์๋ฅผ ๋ค๋ฅด๊ฒ ๋ณด์ฌ์ค ์ ์๋ค.
<c:choose>
<!--<c:when test="${empty sessionScope.principal}"> ์ด๊ฑฐ ์ง์ฐ๊ณ -->
<c:when test="${empty principal}"> <!--์ด๋ ๊ฒ ๋ณ๊ฒฝ-->
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" href="/loginForm">๋ก๊ทธ์ธ</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/joinForm">ํ์๊ฐ์
</a>
</li>
</ul>
</c:when>
<c:otherwise>
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link" href="/board/form">๊ธ์ฐ๊ธฐ</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/user/form">ํ์์ ๋ณด</a>
</li>
<li class="nav-item">
<a class="nav-link" href="/logout">๋ก๊ทธ์์</a>
</li>
</ul>
</c:otherwise>
</c:choose>
์๋กท๊ฒ~!
๋ก๊ทธ์ธ์ form action์ ์ฌ์ฉํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ input ํ๊ทธ ์์ name ๊ฐ์ ์ค์ ํด์ผ ํ๋ค.
ํ์๊ฐ์ ์ฒ๋ผ id๊ฐ ๋ค๊ณ ์์ ์ ์ด์ฟผ๋ฆฌ์์ ํด๋น id๊ฐ ์ฐพ์์ json์ผ๋ก ๋ง๋ค์ด์ ์ ์กํ๋ ๊ฒ์ด ์๋๋ค.
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐ฅ #7 ์คํ๋ง ์ํ๋ฆฌํฐ ์ด๊ธฐ ์ค์ ), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@rladuswl/์คํ๋ง-์ํ๋ฆฌํฐ-์ ์ฉํ๊ธฐ์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค