๐Ÿ”ฅ #6 ์ „ํ†ต์ ์ธ ๋กœ๊ทธ์ธ ๋ฐฉ์‹ (์‹œํ๋ฆฌํ‹ฐ ์ด์šฉ X) (Feat. JSTL)

myeonjiยท2022๋…„ 2์›” 19์ผ
0

JSTL (Jsp Standard Tag Library)

JSP๋ฅผ ์‚ฌ์šฉํ• ๋•Œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ <% %>์„ ์ด์šฉํ•˜์—ฌ JAVA๋ฌธ๊ตฌ๋ฅผ ์ด์šฉํ•˜์ง€๋งŒ, JSTL์€ ํ…Œ๊ทธ๋งŒ์œผ๋กœ๋„ ์ด์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
ํŠนํžˆ EL์ฝ”๋“œ๋Š” ๋งค์šฐ ์ค‘์š”ํ•˜๋ฉด์„œ๋„ ์ž์ฃผ ์“ฐ์ด๋Š” ๋ฌธ๊ตฌ์ด๋‹ค.


< pom.xml >

<!-- JSTL -->
<dependency>
	<groupId>javax.servlet</groupId>
	<artifactId>jstl</artifactId>
</dependency>

< header.jsp >

<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
.
.
.
<c:choose>
	<c:when>
    .
    .
    .
    </c:when>
    <c:otherwise>
    .
    .
    .
    </c:otherwise>
</c:choose>

user.js ๋„ ๋ฐ”๊ฟ”์ค˜์•ผ ํ•œ๋‹ค. ํšŒ์›๊ฐ€์ž…์—์„œ ํ•จ์ˆ˜๋ช…๋งŒ ๋ฐ”๊พธ๋ฉด ๋œ๋‹ค.

login: function () {
        let data = {
            username: $("#username").val(),
            password: $("#password").val()
        };

        $.ajax({
            type: "POST",
            url: "/blog/api/user/login",
            data: JSON.stringify(data), // http body ๋ฐ์ดํ„ฐ
            contentType: "application/json; charset=utf-8", // body ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋–ค ํƒ€์ž…์ธ์ง€ (MIME)
            dataType: "json" // ์š”์ฒญ์„ ์„œ๋ฒ„๋กœ ํ•ด์„œ ์‘๋‹ต์ด ์™”์„ ๋•Œ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ๊ฒƒ์ด String(๋ฌธ์ž์—ด), ๋งŒ์•ฝ ์ƒ๊ธด๊ฒŒ json์ด๋ผ๋ฉด javascript ์˜ค๋ธŒ์ ํŠธ๋กœ ๋ณ€๊ฒฝ
        }).done(function (resp) {
            // ๊ฒฐ๊ณผ๊ฐ€ ์ •์ƒ์ด๋ฉด done ์‹คํ–‰
            alert("๋กœ๊ทธ์ธ์ด ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.");
            //console.log(resp);
            location.href = "/blog";
        }).fail(function (error) {
            // ์‹คํŒจํ•˜๋ฉด fail ์‹คํ–‰
            alert("๋กœ๊ทธ์ธ์ด ์‹คํŒจํ•˜์˜€์Šต๋‹ˆ๋‹ค.");
            alert(JSON.stringify(error));
        });
    }

< UserApiController.java >

// ์ „ํ†ต์ ์ธ ๋กœ๊ทธ์ธ ๋ฐฉ์‹ (์‹œํ๋ฆฌํ‹ฐ ์ด์šฉ X)
  @PostMapping("/api/user/login")
  public ResponseDto<Integer> login(@RequestBody User user) {
      System.out.println("UserApiController : login ํ˜ธ์ถœ๋จ");
      User principal = userService.๋กœ๊ทธ์ธ(user); // principal : ์ ‘๊ทผ์ฃผ์ฒด

      if (principal != null) { // null์ด ์•„๋‹ˆ๋ฉด ์„ธ์…˜ ๋งŒ๋“ค๊ธฐ
          session.setAttribute("principal", principal);
      }
      return new ResponseDto<Integer>(HttpStatus.OK.value(), 1);
  }

๋งค๊ฐœ๋ณ€์ˆ˜์— HttpSession sesson์„ ๋„ฃ์–ด๋„ ๋˜๋Š”๋ฐ, ๋‚˜๋Š” ์œ„์—์„œ ์˜์กด์„ฑ ์ฃผ์ž…(DI)๋กœ private HttpSession session; ์„ ํ•ด๋†”์„œ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์“ฐ์ง€ ์•Š์•˜๋‹ค.

< UserService.java >

  @Transactional(readOnly = true) // Select ํ•  ๋•Œ ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘ -> ์„œ๋น„์Šค ์ข…๋ฃŒ์‹œ์— ํŠธ๋žœ์žญ์…˜ ์ข…๋ฃŒ ๊นŒ์ง€ "์ •ํ•ฉ์„ฑ" ์œ ์ง€
  public User ๋กœ๊ทธ์ธ(User user) {
      return userRepository.findByUsernameAndPassword(user.getUsername(), user.getPassword());
  }

๋กœ๊ทธ์ธ์€ select์ด๋‹ค.
select๋Š” ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์ด ์—†์–ด ํŠธ๋žœ์žญ์…˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋˜์ง€๋งŒ ์ด์ „ ๊ฒŒ์‹œ๊ธ€์„ ๋ณด๋ฉด ์ž์„ธํžˆ ๋‚˜์™€์žˆ๋“ฏ์ด, ์ •ํ•ฉ์„ฑ์„ ์œ„ํ•ด์„œ select์—๋„ ํŠธ๋žœ์žญ์…˜์„ ๋ถ™์˜€๋‹ค.

readOnly=true ๋ผ๊ณ  ํ•ด์ฃผ๋ฉด ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘๋ถ€ํ„ฐ ์ข…๋ฃŒ๊นŒ์ง€ ์ •ํ•ฉ์„ฑ์„ ์œ ์ง€ํ•ด์ค€๋‹ค.

< UserRepository.java >

User findByUsernameAndPassword(String username, String password);

์œ„์˜ ๋ฌธ์žฅ์ด JPA์˜ Naming ์ „๋žต์ด๋‹ค.
SELECT * FROM user WHERE username = ?1 AND password = ?2

๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ๋”ฐ๋ผ์„œ

@Query(value = "SELECT * FROM user WHERE username = ?1 AND password = ?2", nativeQuery = true)
User login(String username, String password);

์ด๋ ‡๊ฒŒ ์จ๋„ ๋˜‘๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•œ๋‹ค.

์ง€๊ธˆ๊นŒ์ง€ ์ด ๋กœ๊ทธ์ธ ๋ฐฉ๋ฒ•์€ ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๋ฅผ ์ด์šฉํ•˜์ง€ ์•Š์€ ์ „ํ†ต์ ์ธ ๋กœ๊ทธ์ธ ๋ฐฉ์‹์ด๋‹ค. !! ๋‹ค์Œ์€ ์‹œํ๋ฆฌํ‹ฐ๋ฅผ ์ด์šฉํ•ด๋ณผ ๊ฒƒ์ด๋‹ค.

profile
๐Ÿ“š

0๊ฐœ์˜ ๋Œ“๊ธ€