블로그 프로젝트 v1 - 게시글 쓰기 페이지 인증 체크

Feb 21, 2024
블로그 프로젝트 v1 - 게시글 쓰기 페이지 인증 체크

1. 게시글 쓰기 화면 인증 체크

notion image
http://localhost:8080/board/saveForm 라고 하니까 해당 페이지에 접근이 가능하다! 로그인도 안 됐는데...! 이러면 안 된다! jsessionId 영역의 user 객체가 없는 사람은 이렇게 들어오면 안 돼! 로그인을 하지 않고 해당 페이지에 접근하면 로그인 페이지로 리다이렉트 시켜버리자!
 

2. 게시글 쓰기 화면 인증 체크 알고리즘

1. /board/saveForm 요청(GET 요청)이 온다. (컨트롤러에 오겠지) 2. session 영역에 sessionUser 키 값에 user 객체가 있는지 체크 3. 체크해서 값이 null이면 로그인 페이지로 리다이렉션 4. 체크해서 값이 null이 아니면 /board/saveForm 으로 이동
notion image
notion image
//object 타입이네? 형변환 하자!
* 인증 체크 로직. 모든 인증이 필요한 곳에 계속 쓰인다. (그래서 user 컨트롤러에도 존재했었네) * 이런걸 스프링에선 리플렉션으로 처리 해버림 * 그러나 디스패처 서블릿을 내가 만드는게 아니라서 우린 리플렉션x * 나중에 AOP? 를 쓴다고 하심
💡
"sessionUser" 라는 세션 키값을 (User)로 형변환 해서 있으면 sessionUser 변수에 담길거고, 없으면 안 담긴다. 이렇게 로그인 여부를 체크함
💡
이런 인증 체크 로직은 계속 쓰이니까 공통 로직으로 쓰는게 더 좋다. 필터나, 컨트롤러 진입 직전 디스패처? 같은 거나…
 

 
notion image
UserController에서도 동일하게 있다.
💡
User는 DB에서 있는지 체크해야해서 userRepository.findby--
 

3. Session에 접근하는 방법 2가지

3-1. DI (생성자 주입)

notion image
//필드에 final로 받기
 

3-2. request 객체로 접근

notion image
💡
getSession 세션 접근 코드 (무조건 알아야)
 

4. 해시맵 알아보기

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");
 

5. 코드

// /board/saveForm 요청(Get)이 온다 @GetMapping("/board/saveForm") public String saveForm() { // session 영역에 sessionUser 키값에 user 객체 있는지 체크 User sessionUser = (User) session.getAttribute("sessionUser"); // 값이 null 이면 로그인 페이지로 리다이렉션 // 값이 null 이 아니면, /board/saveForm 으로 이동 if(sessionUser == null){ return "redirect:/loginForm"; } return "board/saveForm"; }
 
Share article

codingb