@Override public void registerDestructionCallback(String name, Runnable callback) { RequestAttributes attributes = RequestContextHolder.currentRequestAttributes(); attributes.registerDestructionCallback(name, callback, getScope()); }
@Override public Object get(String name, ObjectFactory<?> objectFactory) { Object mutex = RequestContextHolder.currentRequestAttributes().getSessionMutex(); synchronized (mutex) { return super.get(name, objectFactory); } }
@Override public WebRequest getObject() { ServletRequestAttributes requestAttr = currentRequestAttributes(); return new ServletWebRequest(requestAttr.getRequest(), requestAttr.getResponse()); }
@Override protected NativeWebRequest getWebRequest() { RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); Assert.state(requestAttributes instanceof ServletRequestAttributes, "No ServletRequestAttributes"); ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) requestAttributes; return new ServletWebRequest(servletRequestAttributes.getRequest()); } }
/** * Obtain current request through {@link RequestContextHolder}. */ protected static HttpServletRequest getCurrentRequest() { RequestAttributes attrs = RequestContextHolder.getRequestAttributes(); Assert.state(attrs instanceof ServletRequestAttributes, "No current ServletRequestAttributes"); return ((ServletRequestAttributes) attrs).getRequest(); }
@Override public ServletRequest getObject() { return currentRequestAttributes().getRequest(); }
@Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { RequestContextHolder.getRequestAttributes().setAttribute(FROM_REQUEST_ATTRIBUTES_FILTER, FROM_REQUEST_ATTRIBUTES_FILTER, RequestAttributes.SCOPE_REQUEST); chain.doFilter(request, response); } }
@Override @Nullable public Object remove(String name) { RequestAttributes attributes = RequestContextHolder.currentRequestAttributes(); Object scopedObject = attributes.getAttribute(name, getScope()); if (scopedObject != null) { attributes.removeAttribute(name, getScope()); return scopedObject; } else { return null; } }
@Override public String getConversationId() { return RequestContextHolder.currentRequestAttributes().getSessionId(); }
@Override @Nullable public Object remove(String name) { Object mutex = RequestContextHolder.currentRequestAttributes().getSessionMutex(); synchronized (mutex) { return super.remove(name); } }
@Override @Nullable public Object resolveContextualObject(String key) { RequestAttributes attributes = RequestContextHolder.currentRequestAttributes(); return attributes.resolveReference(key); }
@Override public <T> void postProcess(NativeWebRequest webRequest, Callable<T> task, Object concurrentResult) { HttpServletRequest request = webRequest.getNativeRequest(HttpServletRequest.class); if (request != null) { resetContextHolders(request, null, null); } } }
@Override public Object getNativeRequest() { return getRequest(); }
@Override public boolean checkNotModified(String etag) { return checkNotModified(etag, -1); }
/** * Register the given callback as to be executed after session termination. * <p>Note: The callback object should be serializable in order to survive * web app restarts. * @param name the name of the attribute to register the callback for * @param callback the callback to be executed for destruction */ protected void registerSessionDestructionCallback(String name, Runnable callback) { HttpSession session = obtainSession(); session.setAttribute(DESTRUCTION_CALLBACK_NAME_PREFIX + name, new DestructionCallbackBindingListener(callback)); }
@Override public void registerDestructionCallback(String name, Runnable callback, int scope) { if (scope == SCOPE_REQUEST) { registerRequestDestructionCallback(name, callback); } else { registerSessionDestructionCallback(name, callback); } }
/** * Signal that the request has been completed. * <p>Executes all request destruction callbacks and updates the * session attributes that have been accessed during request processing. */ public void requestCompleted() { executeRequestDestructionCallbacks(); updateAccessedSessionAttributes(); this.requestActive = false; }
/** * Does the given request qualify as "not modified"? * @see ServletWebRequest#checkNotModified(long) * @see ServletWebRequest#checkNotModified(String) */ private boolean isRequestNotModified(ServletWebRequest webRequest) { return webRequest.isNotModified(); }
private boolean validateIfUnmodifiedSince(long lastModifiedTimestamp) { if (lastModifiedTimestamp < 0) { return false; } long ifUnmodifiedSince = parseDateHeader(IF_UNMODIFIED_SINCE); if (ifUnmodifiedSince == -1) { return false; } // We will perform this validation... this.notModified = (ifUnmodifiedSince < (lastModifiedTimestamp / 1000 * 1000)); return true; }
private boolean validateIfModifiedSince(long lastModifiedTimestamp) { if (lastModifiedTimestamp < 0) { return false; } long ifModifiedSince = parseDateHeader(IF_MODIFIED_SINCE); if (ifModifiedSince == -1) { return false; } // We will perform this validation... this.notModified = ifModifiedSince >= (lastModifiedTimestamp / 1000 * 1000); return true; }