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);
์ด๋ ๊ฒ ์จ๋ ๋๊ฐ์ ๊ธฐ๋ฅ์ ํ๋ค.
์ง๊ธ๊น์ง ์ด ๋ก๊ทธ์ธ ๋ฐฉ๋ฒ์ ์คํ๋ง ์ํ๋ฆฌํฐ๋ฅผ ์ด์ฉํ์ง ์์ ์ ํต์ ์ธ ๋ก๊ทธ์ธ ๋ฐฉ์์ด๋ค. !! ๋ค์์ ์ํ๋ฆฌํฐ๋ฅผ ์ด์ฉํด๋ณผ ๊ฒ์ด๋ค.