Server๐Ÿงค/SpringSecurity

[Spring] Spring Security์ด๋ž€

yujindonut 2023. 7. 12. 12:05
728x90

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>

 

 

๊ณต์‹๋ฌธ์„œ

 

 

728x90