inblog logo
|
codingb
    Spring

    블로그 프로젝트 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

    RSS·Powered by Inblog