2022 04 30
2022-04-30¶
@SessionAttribute¶
- 참고: https://sun-22.tistory.com/53
-
Session
- Session은 여러 화면이나 여러 요청에서 사용해야하는 객체를 공유할 때 사용 가능
1. HttpSession을 사용하여 Session 추가
@Controller public class SampleController { @GetMapping("/events/form") public String getEvent(Model model, HttpSession httpSession) { Event event = new Event(); event.setLimit(50); event.setName("event1"); model.addAttribute("event", event); httpSession.setAttribute("event", event); return "/events/form"; } }
@SessionAttributes를 통해 추상화- 해당 컨트롤러 내에서 동작하며,
- 해당 컨트롤러 안에서 다루는 특정 모델 객체를 세션에 넣고 공유할 때 사용
- Session은 여러 화면이나 여러 요청에서 사용해야하는 객체를 공유할 때 사용 가능
1. HttpSession을 사용하여 Session 추가
-
SessionAttribute
- 컨트롤러 밖 (인터셉터/필터 등)에서 만들어 준 세션 데이터에 접근할 때 사용 1. HttpSession을 사용해 세션값 받아오기
@SessionAttribute사용
SameSite Cors 개삽질¶
- 참고 : https://yousrain.tistory.com/23
- 개요
- 구글의 Cookie 정책이 바뀌면서 SameSite=Lax로 변경
- "this set-cookie didn't specify a samesite attribute and was default to samesite=lax and was blocked..."
- SameSite
- samesite: 쿠키의 설정, 대부분의 브라우저가 lax
- lax : cross-site끼리의 통신은 특별한 경우 제외하고 쿠키 관리 X
- samesite: 쿠키의 설정, 대부분의 브라우저가 lax
- 해결 방법
- samesite 자체를 none으로 변경
- http 요청을 https로 필히 전환할 것!
- Filter에서 모든 Cookie에 대한 설정을 넣어주는 방식!
@Component public class CookieAttributeFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletResponse httpServletResponse = (HttpServletResponse) response; chain.doFilter(request, response); addSameSite(httpServletResponse , "None"); } private void addSameSite(HttpServletResponse response, String sameSite) { Collection<String> headers = response.getHeaders(HttpHeaders.SET_COOKIE); boolean firstHeader = true; for (String header : headers) { // there can be multiple Set-Cookie attributes if (firstHeader) { response.setHeader(HttpHeaders.SET_COOKIE, String.format("%s; Secure; %s", header, "SameSite=" + sameSite)); firstHeader = false; continue; } response.addHeader(HttpHeaders.SET_COOKIE, String.format("%s; Secure; %s", header, "SameSite=" + sameSite)); } } }