Package com.easydesk.modules.interceptor
Class TransactionContextInterceptor
java.lang.Object
com.easydesk.modules.interceptor.TransactionContextInterceptor
- All Implemented Interfaces:
org.springframework.web.servlet.HandlerInterceptor
@Component
public class TransactionContextInterceptor
extends Object
implements org.springframework.web.servlet.HandlerInterceptor
요청 URL 의 path variable / query parameter 에서 현재 Module, ItemType, ActivitySetType, ActivitySet 을
읽어서
TransactionContextHolder, RequestContextHolder 에 반영한다.
역할 분담
WebTransactionContextFilter,WebRequestContextFilter: 세션에 저장된 기본 Context (userId 등) 를 ThreadLocal 에 바인딩하고, finally 에서 clear 한다.- 이 Interceptor : Filter 가 바인딩한 기본 Context 를 base 로, 이번 요청 URL 에 있는 값으로 덮어쓴 새 Context 객체를 ThreadLocal 에 다시 넣는다. (Context 는 immutable)
{moduleId} 같은
path variable 을 알 수 없으므로 Interceptor 에서 처리한다.
Interceptor 는 Filter chain 안쪽에서 실행되므로 여기서 세팅한 값도 Filter 의 finally 에서 함께 정리된다.
주의
- 세션은 갱신하지 않는다. 여러 탭에서 서로 다른 Module 을 열어도 섞이지 않도록 URL 을 기준 값으로 삼고, URL 에 값이 없으면 세션(Filter 가 바인딩한) 값을 그대로 사용한다.
- userId 는 절대 URL 에서 받지 않는다 (예: /admin/modules/{moduleId}/users/{userId}/roles 의 userId 는 관리 대상 사용자이지 actor 가 아니다).
- path variable 이름은
moduleId,itemTypeId(별칭typeId),activitySetTypeId,activitySetId로 통일한다.{id}처럼 의미가 모호한 이름은 인식하지 않는다.
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidafterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) booleanpreHandle(HttpServletRequest request, HttpServletResponse response, Object handler) Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.springframework.web.servlet.HandlerInterceptor
postHandle
-
Field Details
-
MODULE_KEYS
-
ITEM_TYPE_KEYS
-
ACTIVITY_SET_TYPE_KEYS
-
ACTIVITY_SET_KEYS
-
-
Constructor Details
-
TransactionContextInterceptor
public TransactionContextInterceptor()
-
-
Method Details
-
preHandle
public boolean preHandle(@NonNull HttpServletRequest request, @NonNull HttpServletResponse response, @NonNull Object handler) - Specified by:
preHandlein interfaceorg.springframework.web.servlet.HandlerInterceptor
-
afterCompletion
public void afterCompletion(@NonNull HttpServletRequest request, @NonNull HttpServletResponse response, @NonNull Object handler, @Nullable Exception ex) - Specified by:
afterCompletionin interfaceorg.springframework.web.servlet.HandlerInterceptor
-