![[블로그 만들기] 17. 글쓰기 구현 : 인증 체크하기](https://image.inblog.dev?url=https%3A%2F%2Finblog.ai%2Fapi%2Fog%3Ftitle%3D%255B%25EB%25B8%2594%25EB%25A1%259C%25EA%25B7%25B8%2520%25EB%25A7%258C%25EB%2593%25A4%25EA%25B8%25B0%255D%252017.%2520%25EA%25B8%2580%25EC%2593%25B0%25EA%25B8%25B0%2520%25EA%25B5%25AC%25ED%2598%2584%2520%253A%2520%25EC%259D%25B8%25EC%25A6%259D%2520%25EC%25B2%25B4%25ED%2581%25AC%25ED%2595%2598%25EA%25B8%25B0%26logoUrl%3Dhttps%253A%252F%252Finblog.ai%252Finblog_logo.png%26blogTitle%3DCoding_study&w=2048&q=75)
1. saveForm에 글쓰기 화면 확인하기


{{> /layout/header}}
<div class="container p-5">
<!-- 요청을 하면 localhost:8080/board/save POST로 요청됨
title=사용자입력값&content=사용자값 -->
<div class="card">
<div class="card-header"><b>글쓰기 화면입니다</b></div>
<div class="card-body">
<form action="/board/save" method="post" enctype="application/x-www-form-urlencoded">
<div class="mb-3">
<input type="text" class="form-control" placeholder="Enter title" name="title">
</div>
<div class="mb-3">
<textarea class="form-control" rows="5" name="content"></textarea>
</div>
<button type="submit" class="btn btn-primary form-control">글쓰기완료</button>
</form>
</div>
</div>
</div>
{{> /layout/footer}}
2. 인증 비지니스 파악하기
- 클라이언트의 사용성을 따라 파악하기
- JsessionID 영역에 USER객체가 없는 사람 막기
- 로그인 페이지로 리다이렉션 시키기
3. 인증 체크 알고리즘
- /board/saveForm Get요청이 옴
- session 영역에 sessionUser 키 값에 user 객체가 있는지 체크하기
- 값이 null이면 로그인 페이지로 리다이렉션
아니면 /board/saveForm으로 이동
4. Session에 접근하는 방법
- DI
private HttpSession session;
public BoardController(HttpSession session) {
this.session = session;
}
- request 객체로 접근하기
파라미터로 들고와야 함
public String 메서드명(HttpServletRequest request) {
HttpServletRequest session = request.getSession();
return 값;
}
5. 해시맵 알아보기
HashMap<String, Object> map = new HashMap<>();
map.put("sessionUser", "안녕");
map.put("name", 1.0);
String sessionUser = (String) map.get("sessionUser");
Double name = (Double) map.get("name");
6.인증 로직 구현하기
- BoardController에서 saveForm에 구현하기
package shop.mtcoding.blog.board;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import shop.mtcoding.blog.user.User;
import java.util.List;
@RequiredArgsConstructor
@Controller
public class BoardController {
// HttpSession 객체를 참조
private final HttpSession session;
private final BoardRepository boardRepository; // DI
@GetMapping({"/", "/board"})
public String index(HttpServletRequest request) {
User sessionUser = (User) session.getAttribute("sessionUser");
if (sessionUser == null) {
System.out.println("로그인 안된 상태입니다");
} else {
System.out.println("로그인 된 상태입니다");
}
List<Board> boardList = boardRepository.findAll();
request.setAttribute("boardList", boardList); // ("key", value)
return "index";
}
@GetMapping("/board/saveForm")
public String saveForm() { // session 영역에 접근하기 위한
// 1. session 영역에 sessionUser 키 값에 user 객체가 있는지 체크하기
User sessionUser = (User) session.getAttribute("sessionUser");
// 2. 값이 null이면 로그인 페이지로 리다이렉션
if (sessionUser == null) {
return "redirect:/loginForm";
}
// 3. null이 아니면 /board/saveForm으로 이동
return "board/saveForm";
}
// select b.id, b.title, b.content, b.user_id, u.username from board_tb b inner join user_tb u on b.user_id = u.id where b.id = ?
@GetMapping("/board/{id}")
public String detail(@PathVariable int id, HttpServletRequest request) {
System.out.println("id : " + id);
// 바디 데이터가 없으면 유효성 검사 안해도 됨
BoardResponse.DetailDTO responseDTO = boardRepository.findById(id);
request.setAttribute("board", responseDTO);
return "board/detail";
}
}


Share article