1. 게시글 쓰기 화면 인증 체크
http://localhost:8080/board/saveForm 라고 하니까 해당 페이지에 접근이 가능하다! 로그인도 안 됐는데...! 이러면 안 된다! jsessionId 영역의 user 객체가 없는 사람은 이렇게 들어오면 안 돼! 로그인을 하지 않고 해당 페이지에 접근하면 로그인 페이지로 리다이렉트 시켜버리자!
2. 게시글 쓰기 화면 인증 체크 알고리즘
1. /board/saveForm 요청(GET 요청)이 온다. (컨트롤러에 오겠지) 2. session 영역에 sessionUser 키 값에 user 객체가 있는지 체크 3. 체크해서 값이 null이면 로그인 페이지로 리다이렉션 4. 체크해서 값이 null이 아니면 /board/saveForm 으로 이동
//object 타입이네? 형변환 하자!
* 인증 체크 로직. 모든 인증이 필요한 곳에 계속 쓰인다. (그래서 user 컨트롤러에도 존재했었네) * 이런걸 스프링에선 리플렉션으로 처리 해버림 * 그러나 디스패처 서블릿을 내가 만드는게 아니라서 우린 리플렉션x * 나중에 AOP? 를 쓴다고 하심
"sessionUser" 라는 세션 키값을 (User)로 형변환 해서
있으면 sessionUser 변수에 담길거고, 없으면 안 담긴다.
이렇게 로그인 여부를 체크함
이런 인증 체크 로직은 계속 쓰이니까 공통 로직으로 쓰는게 더 좋다.
필터나, 컨트롤러 진입 직전 디스패처? 같은 거나…
UserController에서도 동일하게 있다.
User는 DB에서 있는지 체크해야해서
userRepository.findby--
3. Session에 접근하는 방법 2가지
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