[블로그 만들기] 17. 글쓰기 구현 : 인증 체크하기

yuzu sim's avatar
Feb 07, 2024
[블로그 만들기] 17. 글쓰기 구현 : 인증 체크하기

1. saveForm에 글쓰기 화면 확인하기

notion image
notion image
{{> /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"; } }
notion image
notion image
Share article

Coding_study