TIL

RequestContextHolder.currentRequestAttributes()) .getRequest()

하얀잔디 2023. 1. 26. 14:40

 

스프링에서 HttpServletRequest에 접근하도록 도와주는 함수이다.

 

나는 @CreateBy 같이, 로그인한 사람의 정보를 바로 저장할때 사용한다.

 

원리를 단순하게 설명하면,

 

1.Spring은 static한 MAP을 하나 만들고,

 

2.Servlet( 참고: https://zandi123.tistory.com/17 ) 이 호출되면,  key를 thread로 해서 제공받은 HttpServletRequest를 보관함.

 

3. 그리고 servlet이 종료될 때 , 해당 쓰레드를 key로 같는 HttpServletRequest를 MAP에서 제거함.

 

4. -> 호출된 서블릿과 동일한 쓰레드 내에서는 어느곳이던 같은 HttpServletRequest를 꺼내서 접근할 수 있음.

 

위는 단순화된 설명이지 실제와는 다르다고 한다.

 

실제는 ThreadLocalMap이라는 객체가 사용되고, 이는 Map의 구현체가 아니고 보관하는 value는 HttpServletRequest가 아닌 가공된 다른것임.

 

Spring에서 HttpServletRequest 접근 방법은 아래와 같습니다.

 

 

 HttpServletRequest req = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();

 

 

정복하자 스프링 시큐리티!

 

참고:

http://dveamer.github.io/backend/SpringRequestContextHolder.html

'TIL' 카테고리의 다른 글

/* vs /**  (0) 2023.02.03
FCM 알람이란  (0) 2023.01.31
[Java] List Compare  (2) 2023.01.18
Equals, hashcode Overide (List To Set이 안될때)  (2) 2023.01.10
공공 API 사용 ( 공휴일 불러들이기)  (0) 2023.01.04