데이터를 넘겨주는 방식에는

Model (= ModelAndView), RedirectAttributes(addFlash, add)

주로 두가지 방법이 있다.

 

코드의 목적 : 장바구니 도착 => 데이터 뿌려줌 => 새로고침해도 유지

=> 다른 페이지 이동시 오류 안나게

 

문제 상황)) 

Model,(ModelAndView)에 담아서 forward방식으로 페이지 이동

url = http://localhost:8079/loginCheck/cartList

(loginCheck/cartList)

 

데이터 성공적으로 넘어감

새로고침 가능

but 다른 페이지로 이동할때(ex)myPage => loginCheck/loginCheck/myPage이동)

url = http://localhost:8079/loginCheck/loginCheck/myPage

그래서 return을 ../cartList로 해줬더니 못찾음 /WEB-INF/../cartList.jsp로 처리 된것 같음

 

고민 : 이거때문에 session에 담아주기는 사용자가 많아졌을 때 서버자원을 많이 잡아먹기 때문에

효율적이지 못한것 같음

 

 

문제 상황 2 : addFlashAttribute에 담아 넘겨주면 302 redirect로 넘겨주는데, 새로고침시에 저장된 데이터가 사라져서 불러오지 못함

(addFlashattribute에서 302로 넘겨주는게 아니라 redirect 방식으로 넘겨주는게 전부 302 방식 인 것 같다. 그러나 다른 사이트에서는 장바구니에 담아도 302로 넘겨주는 모습이 없는데 어떻게 구조를 짠것인지 너무 궁금하다)

 

addFlashAttriubte의 원리는 session에 저장하여 넘겨준 다음, 곧바로 invalidate를 해주는 구조라서

새로고침을 하게 될 경우 장바구니에 담겨진 정보를 불러오지 못하게 된다.

 

결론 : 첫 접근에 loginCheck/cartList 이기 때문에 경로상에 문제가 꼬여서 이 문제가 발생한다.

그렇기 때문에 cartList에 첫 접근시에만 interceptor를 이용하여 권한 체크를 해주고

그 이후에는 interceptor를 통하지 않고 접근이 가능하게 만들었다

@RequestMapping("/loginCheck/cartList") // interceptor 통과
    public String cartList(RedirectAttributes attr, HttpSession session, Model model) {
        MemberDTO mDTO= (MemberDTO) session.getAttribute("login");
        List<CartDTO> list = service.cartList(mDTO.getUserid());

        attr.addFlashAttribute("cartList", list); //리다이렉트시 데이터 유지

        return "redirect:../cartList";

    } 

    @RequestMapping("/cartList") //
    public ModelAndView cartList2(HttpSession session, Model model) {
        MemberDTO mDTO= (MemberDTO) session.getAttribute("login");
        List<CartDTO> list = service.cartList(mDTO.getUserid());

        ModelAndView mav = new ModelAndView(); System.out.println(list);
        mav.addObject("cartList", list); 
        mav.setViewName("cartList");

        return mav;
    }

이렇게 만들어줬을 때 경로상에 꼬이는게 없어서 새로고침도 가능해지고

 

다른 페이지 이동시에 경로가 꼬이지도 않게 된다.

 

결론 : interceptor를 통해 권한 체크를 하는 위치를 잘 정해두고

경로가 꼬이는 경우를 잘 파악해둬야 할 것 같다.

 

새로고침 오류가 날 수 있는 곳(mypage, 댓글, 장바구니, 구매과정 등)에서 페이지 전환에 대한 부분을 좀더 신경써야 할 것 같음

 

 

++ 위의 방식으로 처리하게 될 경우 URI에 바로 cartList를 작성할 경우 로그인 여부를 체크하지 않고 넘어가게 된다.

그러니 접근시에 어떻게든 login세션을 확인해야한다는 건데 권한체크를 어떻게 해야할지 고민해봐야하는 부분이다.

+ Recent posts