![[블로그 만들기] 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