ecsimsw

FlashAttribute 으로 세션을 이용한 리다이렉트 본문

FlashAttribute 으로 세션을 이용한 리다이렉트

JinHwan Kim 2020. 8. 8. 15:24

RedirectAttributes 의 addAttribute 

RedirectAttributes.addAttribute을 이용하는 경우 쿼리 파라미터로 데이터가 포함되어 재요청된다. 

 

예를 들어 아래처럼 핸들러를 작성하는 경우 리다이렉트의 요청 url은 '/redirected?name=jinhwan' 일 것이다.

 

@GetMapping(value="/hello")
public String hello(RedirectAttributes redirectAttributes){
    redirectAttributes.addAttribute("name", "jinhwan");
    return "redirect:/redirected";
}

 

이는 리다이렉트 시 넘겨야하는 값이 쿼리에 표시가 되어야하기 때문에 String으로 변환이 가능한 원시타입, 또는 직렬화가 가능한 타입만 넘길 수 있을 것이고, 쿼리에 표시되기 때문에 보안에도 안좋다.

 

 

addFlashAttribute

FlashAttribute를 사용하면 리다이텍트 시 넘겨야하는 값을 url 이 아닌 세션을 이용하여 전달하고, 리다이렉트 후에는 알아서 삭제해준다.

물론 세션을 이용하기 때문에 원시 타입일 필요도 없다.

 

@GetMapping(value="/hello")
public String hello(RedirectAttributes redirectAttributes){
    redirectAttributes.addFlashAttribute("name","jinhwan");
    return "redirect:/redirected";
}

 

넘긴 속성은 Model 객체에 포함되기 때문에, Model을 주입받아 꺼내 쓰면 된다.

 

@GetMapping(value="/redirected")
@ResponseBody
public String hi(Model model, String name){
    String name = (String)model.asMap().get("name");
    return name;
}

 

Comments