๐1ํธ์ ๋ด์ฉ์ ์งํํ ํ 2ํธ์ ํ์ธํด์ฃผ์ธ์.
์์ฑํ view์ ํต์ฌ ์ฝ๋๋ง ์๊ฐํฉ๋๋ค.
์ ์ฒด ์ฝ๋๊ฐ ํ์ํ์ ๊ฒฝ์ฐ github์์ ํ์ธํ ์ ์์ต๋๋ค. ๐
https://github.com/ty990520/spring-security/tree/master
10. view ์ฐ๊ฒฐ
์ํ๋ฆฌํฐ์์ ์ฌ์ฉํ๋ ์ฝ๋๊ฐ ์๋ ๊ฒฝ์ฐ Controller์ฝ๋๋ ์๋ตํ์๋ค.
๋จผ์ join.html ์ฝ๋๋ฅผ ์์ฑํด๋ณด์.
<form action="/join" method="post">
userid : <input type="text" name="userid" value="taeong">
password : <input type="password" name="password" value="12345">
<input type="radio" name="authRole" value="ADMIN,USER"> admin
<input type="radio" name="authRole" value="USER" checked="checked"> user <br>
<button type="submit">join</button>
</form>
์ ๊ฒ์๊ธ์์ ์ค๋ช ํ๋ฏ์ด, input๊ฐ์ value="ADMIN,USER" ์ฒ๋ผ ๊ฐ์ ์ง์ ํ๋ฉด SecurityConfig์์ hasAuthority()๋ฅผ ์ฌ์ฉํด์ผ ํ๊ณ , value="ROLE_ADMIN, ROLE_USER"๋ก ๊ฐ์ ์ง์ ํ๋ฉด hasRole()์ ์ฌ์ฉํด์ผํจ์ ์์ง๋ง์.
Controller์์ ์ ์ ๋ฅผ saveํ๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ์ ์ ๋ฅผ ์ ์ฅํ๋ค.
โ
๋ค์์ login.html ์ฝ๋๋ฅผ ์์ฑํ๋ค.
<form action="/loginProcess" method="POST">
userid : <input type="text" name="userid" value="taeong">
password : <input type="password" name="password" value="12345" >
<button type="submit">login</button>
</form>
๊ฐ inputํ๊ทธ์ name๊ฐ์๋ http.formLogin()์ ๋งคํํ ๊ฐ๊ณผ ๊ฐ๊ฒ ์์ฑํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ค์ํ ๋ถ๋ถ์ form์ action์ด /login์ด ์๋๋ผ /loginProcess๋ก ์ค์ ๋์ด์ผ ํ๋ค๋ ์ ์ด๋ค.
์ด /loginProcess๋ ์คํ๋ง ์ํ๋ฆฌํฐ๊ฐ ๋ด๋ถ์ ์ผ๋ก ์๋์ฒ๋ฆฌ๋ฅผ ํ๊ธฐ ๋๋ฌธ์ Controller์ ์ง์ ์ ์ํ ํ์๊ฐ ์๋ค.
<div th:if="${param.error}"><span th:text="${param.exception}" style="color: red;"></span></div>
๋ง์ฝ ๋ก๊ทธ์ธ์ด ์คํจํ ๊ฒฝ์ฐ ํ๋ผ๋ฏธํฐ์ ์ ๊ณต๋ error์ฌ๋ถ๋ฅผ ํตํด exception๋ฉ์์ง๋ฅผ ์ถ๋ ฅํด์ค๋ค.
์ด exception๋ฉ์์ง๋ customLoginFailureHandler์์ ๋ฐํ๋ msg๊ฐ์ด ๋๋ค.
login์ฒ๋ฆฌ ์ ์ฃผ์ํ ์ ์ Controller์ ๋ก๊ทธ์ธํ๋ ์ฝ๋๋ฅผ ํฌํจํ ๋ฉ์๋๋ฅผ ์์ฑํ ํ์๊ฐ ์๋ค๋ ๊ฒ์ด๋ค.
์คํ๋ง ์ํ๋ฆฌํฐ์์ ์์์ ๋ก๊ทธ์ธ์ ํ๊ธฐ ๋๋ฌธ์ Controller์๋ loginํ์ด์ง๋ฅผ ํ์ธํ ์ ์๋ GET๋ฐฉ์์ ๋ฉ์๋๋ง ์์ฑํด์ฃผ๋ฉด ๋๋ค.
๋ก๊ทธ์ธ ์ฑ๊ณต ํ ์ ๊ทผํ ์ ์๋ user.html์๋ ์๋์ ์ฝ๋๋ฅผ ์ถ๊ฐํ ์ ์๋ค.
<span style="margin:0; padding: 15px;">
<span sec:authentication="authorities" style="color: #ff6d6d"></span>
<span sec:authentication="name"></span>
</span>
ํ์ฌ ์ ์๋ ๊ถํ๊ณผ ์ฌ์ฉ์ ์ด๋ฆ(=userid)์ ํ๋ฉด์ ๋์์ค๋ค.
๋ก๊ทธ์์์ ํ๋ ๊ฒฝ์ฐ์๋ ๋ฐ๋ก view๋ฅผ ์์ฑํ์ง ์๊ณ Controller๋ง ์์ฑํด์ค๋ค.
@GetMapping("/logout")
public String logoutPage(HttpServletRequest request, HttpServletResponse response) {
new SecurityContextLogoutHandler().logout(request, response, SecurityContextHolder.getContext().getAuthentication());
return "redirect:/login";
}
SecurityContextLogoutHandler์์ logout()๋ฅผ ์ฌ์ฉํ์ฌ ๋ก๊ทธ์์์ ์ฒ๋ฆฌํด์ค ๋ค, ๋ค์ /login์ผ๋ก redirectํ๋ค.
11. ์คํ ๊ฒฐ๊ณผ ํ์ธํ๊ธฐ
build.gradle, application.yml์ค์ ๋ฐ view์ ์ ์ฒด ์ฝ๋, ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ ๋ฑ์ github์์ ์์ธํ ํ์ธํ ์ ์๋ค.
๋ด์ฉ์ด ๋๋ฌด ๊ธธ์ด์ ธ์ ๋ก์ง๊ณผ ๋ทฐ๋ฅผ ๋ถ๋ฆฌํ๊ธด ํ์ง๋ง... ๋ด๋ถ ๊ตฌ์กฐ๊ฐ ๋๋ฌด๋๋ ๋ณต์กํ ์ํ๋ฆฌํฐ....โน๏ธ
๋๊ธ